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

Den*_*nis 2 javascript regex

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

正则表达式: /\[([^\n\]]+)\]/g

它在 regex101 上返回正确的匹配组,但是当我尝试类似的操作时'[a][b]'.match(/\[([^\n\]]+)\]/g),我得到的['[a]', '[b]']不是['a', 'b'].

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

Poi*_*nty 5

您正在使用 String.match()方法,.exec()在带有“g”标志的正则表达式的情况下,该方法与 RegExp 具有不同的行为。该.match()方法为您提供了整个搜索字符串中“g”正则表达式的所有完整匹配项。

如果您将代码更改为

/\[([^\n\]]+)\]/g.exec('[a][b]')
Run Code Online (Sandbox Code Playgroud)

你会得到你期望的结果:一个数组,其中第一个条目 (index 0) 是整个匹配项,第二个和后续条目是来自正则表达式的组。

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

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