【发布时间】:2016-04-13 19:30:06
【问题描述】:
我想知道变量 url 是否匹配数组的任何值
例如,这是我的数组:
var arr = ["test", "foo", "bar", "news-[0-999999999999999]*"];
...和我的字符串
var url = "news-294";
我需要检查每个 arr 值是否与 url 匹配,regex
所以我在数组上尝试了foreach,new RegExp 为每个值,然后检查它是否匹配。但它效果不佳,它正在泄漏我的浏览器内存(CPU 是 24% 用于脚本的空白页)
我该怎么做?谢谢
编辑:这是我的代码:
var CMS = {
RegexMatch: function(regex, str, callback) {
while ((m = regex.exec(str)) !== null) {
if(m[0] == str) callback();
}
},
ArrayFindRegex: function(array, str, callback) {
array.forEach(function(e) {
CMS.RegexMatch(new RegExp(e), str, function() {
callback();
});
});
},
Check: function() {
var url = "blabla";
CMS.ArrayFindRegex(["test", "foo", "bar", "news-[0-999999999999999]*"], url, function() {
console.log('wow');
});
}
}
}
【问题讨论】:
-
将您的代码添加到问题中,以便我们查看发生了什么。另外,如果找到匹配项,您希望发生什么?
-
执行
callback()。只是发布我的代码等待 -
如果你想做正则表达式测试,为什么要从字符串开始?只需存储正则表达式:
var arr = [/test/, /foo/, /bar/, /news-\d+/];,然后执行arr.forEach(re => re.test(...))或for (re of arr) { re.test(...) }(这样做的好处是后者可以让你跳出循环,而前者不会) -
@Mike'Pomax'Kamermans 你能回答一下吗?
-
@MrZ,检查你的花括号。看来您在定义 CMS 时也有一些错误。
标签: javascript arrays regex