Javascript if数组包含正则表达式字符串

Javascript if arrays contains string with regex

本文关键字:正则表达式 字符串 包含 数组 if Javascript      更新时间:2024-06-05

我想知道变量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');
                });
            }
        }
}

请改用Array.prototype.filter。它比每种迭代方法(或者其他迭代方法,在本例中)都更具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);

上面的示例记录了["news-[0-999999999999999]*"]。您可以根据matches的长度断言一个正结果。

如果要进行正则表达式匹配,请从正则表达式而不是字符串开始。

var arr = [/test/, /foo/, /bar/, /news-'d+/];

然后你可以在没有奇怪的字符串重写或积分的情况下进行正常匹配:

var matched = arr.some(re => re.test(...))
if (matched) {
  doSomeThing()
}

for (re of arr) {
  if (re.test(...)) {
    doSomeThing();
    break;
  }
}