javascript
javascript 正则表达式-零宽断言
http://buzheng.org/blog/regex-zero-width-assertion/
正則表達式里面比較高級的應用就屬于零寬斷言了。那么什么是零寬斷言呢?拆分法從字面上分析一下,零寬,即寬帶為0,意味者不會返回匹配的字符,以為匹配的是當前字符的位置。斷言,就是預言、假設,意味著從此處假設存在什么情況。那么零寬斷言的意思就是假定從此位置開始滿足某種情況。
根據斷言字符串位于當前位置的前后關系,分為正向和反向斷言,根據斷言肯定和否定的語氣,又有正向否定斷言和反向否定斷言。肯定即斷言存在該字符串、否定即相反的意思:存在的不是該字符串,總之概念比較繞口,下表介紹的時候順便給出英文:
| (?=X) | 正向斷言,假定該位置后跟的是X zero-width positive lookahead |
| (?!X) | 正向否定斷言,假設該位置后跟的不是X zero-width negative lookahead |
| (?<=X) | 反向斷言,假設該位置前跟的是X zero-width positive lookbehind |
| (?<!X) | 反向否定斷言,假設該位置前跟的不是X zero-width negative lookbehind |
舉例:
(?=X) 正向斷言
[^s]+?(?=ing) 來匹配 having doing listing,會匹配出 hav, do, list,注意:并不會匹配出ing,因為ing是零寬斷言的部分。
(?!X) 正向否定斷言
一個用戶注冊功能的密碼有如下要求:由數字和字母組成,并且要同時含有數字和字母,且長度要在8-16位之間。
如何分析需求?拆分!這就是軟件設計的一般思路了。于是乎,拆分需求如下:
1,不能全部是數字
2,不能全部是字母
3,必須是數字或字母
只要能同時滿足上面3個要求就可以了,寫出來如下:
分開來注釋一下:
^ 匹配一行的開頭位置
(?![0-9]+$) 預測該位置后面不全是數字
(?![a-zA-Z]+$) 預測該位置后面不全是字母
[0-9A-Za-z] {8,16} 由8-16位數字或這字母組成
$ 匹配行結尾位置
(?<=X) 反向斷言
(?<=hell)[a-z]+ 來匹配test hellen hellas helloween,會匹配出 en, as, oween
(?<!X) 反向否定斷言
[a-z]+(?<!hell)en 來匹配testen hellen hellas helloween,會匹配出testen和helloween
注:所有的案例都在UE下進行測試。
轉載于:https://www.cnblogs.com/anjey/archive/2012/08/16/2642332.html
總結
以上是生活随笔為你收集整理的javascript 正则表达式-零宽断言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [C# 网络编程系列]专题十二:实现一个
- 下一篇: gradle idea java ssm