究竟是什麼標題要求。我會在解釋我的問題時提供一些示例。在數組中存儲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'屬性?如果任何人都可以發表評論,請做。 =] –