2017-05-31 80 views
0

我有一個名爲腳本的對象。它包含一個名爲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

回答

1

您需要轉義字符串你建立之前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部分的正則表達式特殊甜心匹配例如^+()然後替換在它們之前添加斜線,以便在解析字符串時忽略它們。