只有匹配第一个匹配的全局标志的正则表达式

Ash*_*Ash 2 javascript regex regex-greedy

为什么:

/(\[#([0-9]{8})\])/g.exec("[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]")
Run Code Online (Sandbox Code Playgroud)

返回

["[#12345678]","[#12345678]","12345678"]

我希望它能匹配所有这些数字,但它看起来太贪心了.

[#12345678] [#87654321] [#56233001] [#23438459] [#56435355] 12345678 87654321 56233001 36381069 23416459 56435355

gra*_*ing 5

这是.exec()有效的.要获得多个结果,请在循环中运行它.

var re = /(\[#([0-9]{8})\])/g,
    str = "[#12345678] [#87654321] [#56233001] [#36381069] [#23416459] [#56435355]",
    match;

while (match = re.exec(str)) {
    console.log(match);
}
Run Code Online (Sandbox Code Playgroud)

此外,外部捕获组似乎无关紧要.你可能应该摆脱它.

/\[#([0-9]{8})\]/g,
Run Code Online (Sandbox Code Playgroud)

结果:

[
    "[#12345678]",
    "12345678"
],
[
    "[#87654321]",
    "87654321"
],
[
    "[#56233001]",
    "56233001"
],
[
    "[#36381069]",
    "36381069"
],
[
    "[#23416459]",
    "23416459"
],
[
    "[#56435355]",
    "56435355"
]
Run Code Online (Sandbox Code Playgroud)