【发布时间】:2012-06-04 04:31:07
【问题描述】:
正是标题所要求的。我将在解释我的问题时提供一些示例。
测试字符串:
var test = "#foo# #foo# bar #foo#";
说,我想提取#之间的所有文本(所有foos,但不是bar)。
var matches = test.match(/#(.*?)#/g);
如上所述使用.match,它将存储所有匹配项,但它会简单地丢弃看起来的捕获组。
var matches2 = /#(.*?)#/g.exec(test);
.exec 方法显然只返回数组的位置 0 中第一个结果的匹配字符串,以及位置 1 中我唯一捕获该匹配的组。
我已经用尽 SO、Google 和 MDN 寻找答案无济于事。
那么,我的问题是,有没有比使用.exec 循环并调用array.push 来存储捕获的组更好的方法来仅存储匹配的捕获组?
我对上述测试的预期数组应该是:
[0] => (string) foo
[1] => (string) foo
[2] => (string) foo
接受纯 JS 和 jQuery 答案,如果您使用 console.log 发布 JSFiddle,则需要额外的 cookie。 =]
【问题讨论】:
标签: javascript regex