If - JS/Angular中变量的正则表达式(不区分大小写)

Regular Expression (case insensitive) on a Variable in an If - JS/Angular

本文关键字:正则表达式 不区 大小写 变量 JS Angular If      更新时间:2023-09-26

我试图找到if a value存储在动态variable中是在array内部,同时忽略大小写而不使用.toLowerCase()或更高。

我的工作是:

if ($scope.favoriteItems.indexOf(item.name.toLowerCase()) === -1) {

我想使用regex if (item.name 'no matter case is in $scope.favoriteItems)

你可以这样做:

if ($scope.favoriteItems.some(item => (new RegExp(item.name, 'i')).test(item))) {
  // do something
}

基本上,要用变量创建RegExp,您可以new RegExp(),并将您想要的表达式作为第一个参数,并将任何标志作为第二个参数。

比如:

var name = 'abc';
new RegExp(name, 'i');

变成:

/abc/i

var name = 'abc';
console.log(new RegExp(name, 'i'));

Array.prototype.some函数循环遍历数组中的每个元素,直到其中一个返回true。在本例中,我们继续循环,直到其中一个匹配我们的regexp(意味着它在数组中),然后停止。

也就是说,除非item.name将不仅仅是一个字符串匹配,否则使用regex测试是大量的过度使用,您最好坚持使用现有的

对于ES5,应该是

var isFavourite = $scope.favoriteItems.some(function (favoriteItem) {
  return favoriteItem.toLowerCase() === item.name.toLowerCase();
});

对于完全匹配的字符串,toLowerCase是首选的,也是进行不区分大小写比较的最快方式。在这种情况下没有很好的理由使用regexp。这将需要使用额外的函数进行字符串转义,例如escape-string-regexp:

var ITEM_REGEXP = new RegExp('^' + escapeStringRegexp(item.name) + '$', 'i');
var isFavourite = $scope.favoriteItems.some(function (favoriteItem) {
  return ITEM_REGEXP.test(favoriteItem);
});