Javascript:new Regexp在字符串连接时销毁循环迭代器
问题描述:
我有一个名为脚本的对象。它包含一个名为name的变量,其中包含一个字符串。Javascript:new Regexp在字符串连接时销毁循环迭代器
还有一个包含多脚本脚本对象的数组,该数组称为脚本。它的大小为5
我有一个循环,我想创建一个新的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]。名称为“(” for循环停止工作,而是increamenting我把它停在I = 0。这是奇怪的东阳for循环还是无限期地停止循环代替。
如果我更换
scriptName = scripts[i].name+"(";
与
scriptName = scripts[i].name;
我得到正确的输出: 0,1,2,3,4
否则我得到的输出0×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
部分的正则表达式特殊甜心匹配例如^
+
(
)
然后替换在它们之前添加斜线,以便在解析字符串时忽略它们。
'scriptName'必须是有效的正则表达式。 – gurvinder372
你需要避免大括号为'\\('直接匹配它'。('在RegEx中有特殊含义,当在正则表达式中找不到')'时,它会抛出错误“Unterminated group”。 – Tushar
谢谢我明白! – Elias