JavaScript正则表达式不返回匹配组

时间:2014-06-24 19:15:27

标签: javascript regex

我正在尝试在字符串中的方括号之间获取内容,但我的正则表达式无效。

RegExp:/\[([^\n\]]+)\]/g

它会在regex101上返回正确的匹配组,但当我尝试'[a][b]'.match(/\[([^\n\]]+)\]/g)之类的内容时,我会['[a]', '[b]']而不是['a', 'b']

如果我迭代并执行RegExp.exec,我可以得到正确的结果,但是从在线查看示例看起来我应该能够使用String.match获取匹配组

1 个答案:

答案 0 :(得分:3)

您正在使用字符串.match()方法,该方法与正则表达式具有" g"的RegExp .exec()具有不同的行为。旗。 .match()方法为您提供了整个搜索字符串中的所有匹配项,以便" g"正则表达式。

如果您将代码更改为

/\[([^\n\]]+)\]/g.exec('[a][b]')

您将得到您期望的结果:第一个条目(索引0)是整个匹配的数组,第二个和后续条目是正则表达式中的组。

你必须迭代以匹配所有这些:

var re = /\[([^\n\]]+)\]/g, search = "[a][b]", bracketed = [];
for (var m = null; m = re.exec(search); bracketed.push(m[1]));