js關於正則的前後關聯約束(前後預查)

zhangfaliang發表於2018-12-24

最近研究了正則的前後預查,感覺好玩就分享一下,文章最後有意外的驚喜哦。

前置約束和後之約束都屬於只匹配不捕獲(非捕獲族)。

前置約束用於判斷所匹配的格式是否在另一個確定的格式之後,反知,後之約束用於判斷所匹配的格式是否在另一個格式之前。

符號描述
?=前置約束-存在
?!前置約束-排除
?<=後置約束-存在
?<!後置約束-排除



1 、前置約束 ?=(存在)

比如 我們先想匹配red字串,但是希望後面跟的是shiny的字串。我們應該這樣寫 /(red)(?=shiny)/

 /(red)(?=\sshiny)/=>'red shiny red black'

解釋一下 /(red)(?=\sshiny)/ 為什麼是\sshiny,因為red和shiny之間有一個空格所以加了一個\s 是空格匹配

2、前置約束?!(排除)

比如我們想匹配red字串,但是後面不跟black字串,那麼就應該這樣寫/(red)(?!\sblack)/

/(red)(?!\sblack)/=>'red shiny red black'

3、後置約束?<=(存在)

比如我們現在想匹配red字串,但是它的前面必須是shiny字串,那麼我們就應該這麼寫/(?<=\shiny\s)(red)/

/(?<=\shiny\s)(red)/=>'red shiny red black'

4、後置約束?<!(排除)

比如我們現想匹配red字串,但是它的前面不能是black字串,那麼我們用該這樣寫/(?<=!black\s)red/

/(?<!\black\s)(red)/=>'red shiny red black red'


上面的示例是不是很簡單,但是告訴大家一個很不好訊息尤其是移動端開發者,有些瀏覽器不支援這種寫法,我是在工作中遇見的,還有一個不得不吐槽的問題就是ios的safari不止"-"這個字元寫正則的時候大夥們注意一下


相關文章