1 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
這里涉及 match
方法的一個(gè)細(xì)節(jié),當(dāng)正則表達(dá)式設(shè)置了全局檢索標(biāo)識(shí) g
,若在字符串中匹配到,返回是一個(gè)包含了所有匹配項(xiàng)的數(shù)組:
'baz'.match(/./g); // ["b", "a", "z"]
如果沒有這個(gè)全局檢索標(biāo)識(shí),只會(huì)檢索第一個(gè)匹配,但是返回的仍舊是個(gè)數(shù)組,數(shù)組第一項(xiàng)是匹配結(jié)果,其后的數(shù)組項(xiàng)則是正則中各個(gè)分組表達(dá)式(你看到正則表達(dá)式中的括號(hào))的匹配結(jié)果
var a = 'baz'.match(/^b(a)(z)/); // ["baz", "a", "z"]
這樣你訪問 a[1]
就是第一個(gè)分組表達(dá)式 (a)
的匹配結(jié)果,類似的a[2]
就是第二個(gè)分組表達(dá)式 (z)
的結(jié)果,以此類推,a[n]
對(duì)應(yīng)第n個(gè)分組表達(dá)式匹配的值。
然后,回到你的問題,這個(gè)表達(dá)式匹配:從起始位置開始,除'#'外的所有字符
這里沒有設(shè)置全局檢索標(biāo)識(shí),所以只會(huì)檢索第一個(gè)匹配,然后就是分組表達(dá)式的匹配,數(shù)組第二項(xiàng)就是(/[^#]+/)
這個(gè)分組表達(dá)式的匹配結(jié)果
如果沒有匹配到,match
返回 null
,[][1]
如你所見,undefined
可能有同學(xué)會(huì)納悶為什是這樣的實(shí)現(xiàn)?
如果你知道replace方法中基于分組替換的實(shí)現(xiàn):
'baz'.replace(/(b)(a)(z)/, '$1-$2-$3'); // "b-a-z"
其中,$n
分別對(duì)應(yīng)第n個(gè)分組表達(dá)式的匹配結(jié)果,用法和 match
非常相似
添加回答
舉報(bào)