我有一个名为脚本的对象。它包含一个名为 name 的变量,其中包含一个字符串。
还有一个数组,包含多个脚本对象,该数组称为脚本。它的大小是 5。
我有一个 for 循环,我想为与“(”连接的脚本对象的每个名称创建一个新的正则表达式:
var scriptName;
for(var i=0; i<scripts.length; i++){
console.log("i = "+i);
scriptName = scripts[i].name+"(";
var newRegex = new RegExp(scriptName, 'g');
}
问题是,每当我将 script[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
部分匹配正则表达式特殊字符,例如 ^
+
(
)
,然后替换在它们之前添加斜杠,以便在解析字符串时忽略它们。