正是标题所要求的。在解释我的问题时,我将提供一些示例。
测试字符串:
var test = "#foo# #foo# bar #foo#";
说,我想提取#
(所有foo
s 但不是bar
)之间的所有文本。
var matches = test.match(/#(.*?)#/g);
如上所述使用.match
,它将存储所有匹配项,但它会简单地丢弃看起来的捕获组。
var matches2 = /#(.*?)#/g.exec(test);
该.exec
方法显然仅返回数组位置中第一个结果的匹配字符串,以及该位置0
中我唯一捕获的匹配组1
。
我已经筋疲力尽了,谷歌和 MDN 都在寻找无济于事的答案。
所以,我的问题是,有没有更好的方法来存储匹配的捕获组而不是循环遍历它.exec
并调用array.push
来存储捕获的组?
我对上述测试的预期数组应该是:
[0] => (string) foo
[1] => (string) foo
[2] => (string) foo
接受纯 JS 和 jQuery 答案,如果您使用console.log
. =]