2015-10-13 81 views
1

我有一個JS正則表達式匹配,似乎包括不正確的括號。我測試了它在Regex101,它似乎有適當的工作,但是當我運行它,我得到這個警報響應:js正則表達式的差異

[#],[Type,' '],[Problem w/ICD],['- ',Assessment],[' : ',Comment],[LF],[LF]

var temp = "[#]. [Type,' '][Problem w/ICD]['- ',Assessment][' : ',Comment][LF][LF]"; 
var rep = temp.match(/\[(.*?)\]/g); 
alert(rep); 

爲什麼當他們捕捉組外括號包括在內?

回答

2

括號中包含括號,因爲當使用string#match和帶有/g修飾符的正則表達式時,您將失去捕獲組。

如果正則表達式包含g標誌,則該方法返回包含所有匹配的子字符串而不是匹配對象的數組。 捕獲的組不返回。

你需要在一個循環中使用RegExp#exec(),並通過指數1

var re = /\[(.*?)\]/g; 
 
var str = '[#]. [Type,\' \'][Problem w/ICD][\'- \',Assessment][\' : \',Comment][LF][LF]'; 
 
var m; 
 
var res = []; 
 
while ((m = re.exec(str)) !== null) { 
 
    res.push(m[1]); 
 
} 
 
console.log(res);

結果存取第一個捕獲組:

["#", "Type,' '", "Problem w/ICD", "'- ',Assessment", "' : ',Comment", "LF", "LF"] 
+0

僅供參考:['/\[([^[]]*)\]/g'](https://regex101.com/r/hB9qQ9/1)更有效 在這種情況下。 –

+1

完美。謝謝。 – cycle4passion