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
部分匹配正则表达式特殊字符,例如 ^
+
(
)
然后替换在它们之前添加斜杠,以便解析字符串时将忽略它们。
我有一个名为脚本的对象。它包含一个名为 name 的变量,其中包含一个字符串。
还有一个包含多个脚本对象的数组,数组称为脚本。它的大小是 5.
我有一个 for 循环,我想为每个用“(”:
连接的脚本对象名称创建一个新的 RegExpvar 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
部分匹配正则表达式特殊字符,例如 ^
+
(
)
然后替换在它们之前添加斜杠,以便解析字符串时将忽略它们。