js正则表达式差异

时间:2015-10-13 22:03:48

标签: javascript regex brackets

我有一个JS正则表达式匹配似乎包括错误的括号。我在Regex101测试了它,它似乎在那里正常工作,但是当我运行它时,我得到了这个警报响应:

[#],[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);

当它们位于捕获组之外时,为什么包括括号?

1 个答案:

答案 0 :(得分: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"]