/x(?=y)/ MDN解釋如下
匹配'x'僅僅當'x'後面跟着'y'.這種叫做先行斷言。
例如,/Jack(?=Sprat)/會匹配到'Jack'僅當它後面跟着'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack’僅當它後面跟着'Sprat'或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配結果的一部分。
先行斷言詳解
x(?=y) 先行斷言就是,斷言我需要匹配的內容x後面一定跟着y。所以只會匹配到xy中的x
此處誤區爲,有人認爲會匹配到y,這是錯的。先行斷言只會匹配x
代碼如下:
let str = "a123"
str.match(/a(?=123)/)
// 會匹配到a => a
str.match(/a(?=1234)/)
// 不會匹配到a =>null
由上面的解釋可知。?= 僅會匹配到 後面跟着123的a ;
所以進一步 編寫:
let str1 = "a123ASas"
str1.match(/a(?=123)\d/)
// 會匹配到a1 => a1
解釋: 匹配到了後面跟着123的a 然後匹配到了\d 1 所以輸出爲a1