我有一个称为脚本的对象。它包含一个名为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');
}


问题是,每当我将scripts [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部分与正则表达式特殊字符(例如^ + ( ))匹配,然后replace在其前面添加斜杠,以便在分析字符串时将其忽略。

10-06 08:00
查看更多