我正在尝试在字符串中的方括号之间获取内容,但我的正则表达式无效。
RegExp:/\[([^\n\]]+)\]/g
它会在regex101上返回正确的匹配组,但当我尝试'[a][b]'.match(/\[([^\n\]]+)\]/g)
之类的内容时,我会['[a]', '[b]']
而不是['a', 'b']
。
如果我迭代并执行RegExp.exec,我可以得到正确的结果,但是从在线查看示例看起来我应该能够使用String.match获取匹配组
答案 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]));