爲什麼string.match(/(regexp)/);
帶括號會返回匹配兩次?爲什麼帶括號的string.match(/(regexp)/)會返回兩次匹配?
例如:"abcdef".match(/(cd)/);
返回cd
兩個實例:["cd","cd"]
我看了在MDN documentation。對於多次返回比賽沒有任何說明。我還看過ECMA docs。
通過抓取[1]
索引string.match()
有一個解決方法,但我無法在文檔中找到解釋。
爲什麼string.match(/(regexp)/);
帶括號會返回匹配兩次?爲什麼帶括號的string.match(/(regexp)/)會返回兩次匹配?
例如:"abcdef".match(/(cd)/);
返回cd
兩個實例:["cd","cd"]
我看了在MDN documentation。對於多次返回比賽沒有任何說明。我還看過ECMA docs。
通過抓取[1]
索引string.match()
有一個解決方法,但我無法在文檔中找到解釋。
讓我們跟隨上RegExp.match
的文檔如果正則表達式不包含g標誌,返回 相同的結果RegExp.exec(STR)。
好,去RegExp.exec
如果匹配成功,exec方法返回一個數組和更新正則表達式對象的 屬性。返回的數組有 匹配的文本作爲第一項,然後每個 捕獲一個項目匹配包含文本被捕獲的 。
出人意料的是,MDN文檔(這裏是它的一個Wayback snapshot現在)都在此確實無語,但我敢打賭,match
將首先返回整場比賽,就像RegExp.exec
這裏有一個測試:
"abcdef".match(/(bc).?(e)/)
=> ["bcde", "bc", "e"]
另一種解決方法是使用'/ g'標誌。 –