我有一个称为脚本的对象。它包含一个名为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在其前面添加斜杠,以便在分析字符串时将其忽略。