Javascript if数组包含带有正则表达式的字符串
我想知道变量Javascript if数组包含带有正则表达式的字符串,javascript,arrays,regex,Javascript,Arrays,Regex,我想知道变量url是否与数组的任何值匹配 例如,这是我的数组: var arr = ["test", "foo", "bar", "news-[0-999999999999999]*"]; var CMS = { RegexMatch: function(regex, str, callback) { while ((m = regex.exec(str)) !== null) { if(m[0] == str) callback();
url
是否与数组的任何值匹配例如,这是我的数组:
var arr = ["test", "foo", "bar", "news-[0-999999999999999]*"];
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');
});
}
}
}
。。。还有我的琴弦
var url = "news-294";
我需要检查每个arr
值是否与url匹配,使用regex
所以我在数组上尝试了一个foreach
,对每个值使用newregexp
,然后检查它是否匹配。但是它没有很好地工作,并且它正在泄漏我的浏览器内存(对于带有脚本的空白页面,CPU
为24%)
我该怎么做?谢谢
编辑:这是我的代码:
var arr = ["test", "foo", "bar", "news-[0-999999999999999]*"];
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');
});
}
}
}
试试看。它比每种方法(在本例中是其他迭代方法)更具idomaticfilter
返回一个数组,其内容为任何匹配项,如果未找到匹配项,则返回空数组
var arr = ["test", "foo", "bar", "news-[0-999999999999999]*"];
var url = "news-294";
var matches = arr.filter(function(pattern) {
return new RegExp(pattern).test(url);
})
console.log(matches);
上面的示例记录了
[“新闻-[0-9999999999999]*”]
。您可以根据匹配的长度断言一个肯定的结果。如果要进行正则表达式匹配,请从正则表达式开始,而不是从字符串开始
var arr = [/test/, /foo/, /bar/, /news-\d+/];
然后,您可以进行正常匹配,而无需重写或解释奇怪的字符串:
var matched = arr.some(re => re.test(...))
if (matched) {
doSomeThing()
}
或
将您的代码添加到问题中,以便我们可以看到发生了什么。另外,如果找到匹配项,您希望发生什么?执行callback()
。如果你想做regexp测试,为什么要从字符串开始呢?只需存储regexp:var arr=[/test/,/foo/,/bar/,/news-\d+/]然后做一个arr.forEach(re=>re.test(…)
或for(re-of-arr){re.test(…)}
(好处是后者会让你跳出循环,而前者不会)@Mike'Pomax'Kamermans你能回答吗?@MrZ,检查你的花括号。似乎你在定义CMS时也有一些错误。那么,对那个可怕的正则表达式本身没有评论吗?你是对的,原始代码可以改进,但其他人似乎在提供这方面的建议。我只是想为OP目前拥有的东西提供一个解决方案,而不是重构。