正則表示式_斷言(lookahead/lookbehind)
阿新 • • 發佈:2018-11-16
概念
- 正則表示式中的Where條件
適用於更新regex表示式選中結果的部分內容
實際上匹配字串,但隨後放棄匹配,只返回結果 例如
'as"df",sdf".sdfa">'.match(/"(?![>|\s|,|.])/)
,
表示後面沒有字元 大於號(>),空格符( ),逗號(,),句號(.)的首個雙引號(“),最後匹配的結果只有雙引號(“)javascript測試,只返回了s字元後面的 " [""", index: 2, input: "as"df",sdf".sdfa">", groups: undefined]
分類
按照方向劃分有先行和後行兩種,按照是否匹配有肯定和否定兩種,組合起來就有四種斷言。
先行斷言相當於在當前位置右側附加一個條件,而後行斷言相當於在當前位置左側附加一個條件。
1. (?=Expression) 先行肯定斷言,表示所在位置右側能夠匹配Expression, 結果不包含Expression
2. (?!Expression) 先行否定斷言,表示所在位置右側不能匹配Expression, 結果不包含Expression
3. (?<=Expression) 後行肯定斷言,表示所在位置左側能夠匹配Expression, 結果不包含Expression
4. (?<!Expression) 後行否定斷言,表示所在位置左側不能匹配Expression, 結果不包含Expression
例項:Javascript測試
"http://192.168.1.250:9595/".match("(?<=://)[a-zA-Z\.0-9-_]+(?=[:,\/])")
含義:獲取IP地址, 匹配左側以 ‘://’ 開始,右側以 ‘:’ ‘,’ ‘\’ ‘/’ 之一的字元結束
", index: 7, input: "http://192.168.1.250:9595/", groups: undefined]
"Add_New_Equipment_Item_Des2".match("(?<=Add_New)_(?=.*?Des2)")
含義:獲取Add_New後面的首個下劃線符號
["_", index: 7, input: "Add_New_Equipment_Item_Des2", groups: undefined]
3.'as"df",sd"f".sdfa">'.match(/"(?![>|\s|,|.])/g)
含義:後面沒有字元 大於號(>),空格符( ),逗號(,),句號(.)的所有雙引號(“)
/後面的 g表示global, 返回所有匹配的結果
[""", """]
//s與d後面的”
注意
- Visual Studio 2017支援後行斷言, 但是Visual Studio Code不支援!github issue中說明vscode的正則過濾依賴於javascript,
但javascript支援..可能程式的側重點不在單一的處理文字 - JavaScript Regex
- Regex Lookahead
- Regex Online Plat