Javascript: 新的 Regexp 在连接字符串时销毁 for 循环迭代器

Javascript: new Regexp destroys for loop iterator when string is concatenated

我有一个名为脚本的对象。它包含一个名为 name 的变量,其中包含一个字符串。

还有一个包含多个脚本对象的数组,数组称为脚本。它的大小是 5.

我有一个 for 循环,我想为每个用“(”:

连接的脚本对象名称创建一个新的 RegExp
var scriptName;
for(var i=0; i<scripts.length; i++){
    console.log("i = "+i);
    scriptName = scripts[i].name+"(";
    var newRegex = new RegExp(scriptName, 'g');
}

问题是,每当我将脚本[i].name 与“(”连接时,for 循环就会停止工作。它不会增加 i,而是在 i=0 处停止。这很奇怪,因为 for 循环仍然停止,而不是无限循环。

如果我替换

scriptName = scripts[i].name+"(";

scriptName = scripts[i].name;

我得到了正确的输出: 0, 1, 2, 3, 4

否则我得到输出 0 x 5 次

在构建 RegExp 之前,您需要对字符串进行转义 - 如下所示:

var scriptName;
for(var i=0; i<scripts.length; i++){
    console.log("i = "+i);
    scriptName = scripts[i].name+"(";
    // Escape for regex
    var escapedName = scriptName.replace(
        /[\-\[\]\/\{\}\(\)\*\+\?\.\\^$\|]/g, "\$&"
    );
    var newRegex = new RegExp(escapedName, 'g');
}

有趣的 /[\-\[\]\/\{\}\(\)\*\+\?\.\\^$\|]/g 部分匹配正则表达式特殊字符,例如 ^ + ( ) 然后替换在它们之前添加斜杠,以便解析字符串时将忽略它们。