究竟是什么标题要求。我会在解释我的问题时提供一些示例。在数组中存储JS Regex捕获组的最佳方法?
测试字符串:
var test = "#foo# #foo# bar #foo#";
说,我想提取#
(所有foo
秒,但不bar
)之间的所有文本。
var matches = test.match(/#(.*?)#/g);
使用.match
如上所述,它会储存所有的比赛,但它会简单地扔掉捕获组看来。
var matches2 = /#(.*?)#/g.exec(test);
的.exec
方法显然在位置1
位置阵列的0
且匹配的我的唯一的捕获组只返回该第一结果的匹配的字符串。
我已经穷尽了,谷歌和MDN寻找一个无济于事的答案。
所以,我的问题是,有没有更好的方式来存储匹配的捕获组,而不是通过循环遍历它与.exec
和调用array.push
来存储捕获的组?
我对上面的测试预期阵列应该是:
[0] => (string) foo
[1] => (string) foo
[2] => (string) foo
纯JS和jQuery的答案被接受,额外的饼干,如果你发布的jsfiddle与console.log
。 =]
与我发现的'.exec'循环类似,但更简单和优雅,看起来像是一个合适的答案,因为我可以访问所有匹配并从'item'数组中捕获组。 –
如果你想看到更多的JS魔法,你可以检查[我不是我]的答案(http://stackoverflow.com/users/1106925/am-not-i-am),它来自其中一个他的回答。 :) –
已收藏他的个人资料以便稍后阅读答案=]现在,即使在阅读[MDN文档](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/exec)之后, t找到'.exec'每次调用时都知道从哪里开始匹配字符串(“offset”?),好的重要的是它的工作原理。我认为它会自动存储'lastIndex'属性?如果任何人都可以发表评论,请做。 =] –