If - JS/Angular中变量的正则表达式(不区分大小写)
Regular Expression (case insensitive) on a Variable in an If - JS/Angular
我试图找到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);
});
相关文章:
- 为什么这个正则表达式不't匹配最后一个字母数字字符
- 为什么以下正则表达式不删除 ## 字符
- JavaScript正则表达式不匹配
- Javascript错误正则表达式不是函数
- 匹配正则表达式不分隔大写或不大写
- Javascript 正则表达式不会在应该给出错误消息时给出错误消息
- 这个正则表达式不应该工作吗?
- javascript正则表达式不起作用:至少一个0-9,一个a-z,一个a-z,一个来自$-_.+*'()
- 信用卡信息的正则表达式不应允许使用字符
- 为什么正则表达式不能正确验证网站URL
- 无法理解为什么Javascript正则表达式不起作用
- 正则表达式不匹配序列中的两个相同字符
- 电子邮件正则表达式不会验证句点后的部分
- 正则表达式不允许所有特殊字符,但允许其他语言,如希伯来语 JavaScript
- 用于十进制验证的 Javascript 正则表达式不起作用
- 正则表达式不考虑 .在JavaScript中进行模式测试时
- 正则表达式不能用 .replace() 工作
- 正则表达式不允许特殊字符(Javascript)
- 节点.js正则表达式不起作用
- 为什么这个简单的正则表达式不起作用