詳解正則中先行斷言的用法

/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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章