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');
                });
            }
        }
}
试试看。它比每种方法(在本例中是其他迭代方法)更具idomatic
filter
返回一个数组,其内容为任何匹配项,如果未找到匹配项,则返回空数组

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目前拥有的东西提供一个解决方案,而不是重构。