富國滬深
2023-04-30 11:07:49
url = (url.match(/^([^#]+)/)||[])[1];url 是取的form中的action,如果form中的action不存在,則去取window.location.href這段正則是匹配什么?(url.match(正則)||[])[1]
1 回答

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