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倍

+0

'scriptName'必须是有效的正则表达式。 – gurvinder372

+3

你需要避免大括号为'\\('直接匹配它'。('在RegEx中有特殊含义,当在正则表达式中找不到')'时,它会抛出错误“Unterminated group”。 – Tushar

+0

谢谢我明白! – Elias

您需要转义字符串你建立之前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部分的正则表达式特殊甜心匹配例如^+()然后替换在它们之前添加斜线,以便在解析字符串时忽略它们。