《正則表達式必知必會》這本書的確很是的簡練實用,準肯定位了正則表達式的用途,簡明的介紹了正則表達式的基本使用形式。簡單易懂,容易記憶,雖然從表面上看這本書的內容比較少並且簡單,可是說的內容都是很是基礎的磚石,不管想建造多麼高大、吊炸天的大樓,基礎的磚石都是必不可少的。javascript
看完這本書,受益頗多,在此將書中的內容再次總結,搭起本身對於正則表達式的認識框架。前端
正則表達式的使用對象:文本/字符串。用途對文本/字符串進行搜索、替換。java
正則表達式的基本匹配單位:一個字符。正則表達式
正則表達式在不一樣的程序設計語言中,實現會有不一樣,因爲本人是主要是前端工做,因此關注點基本放在javascript上。框架
正則表達式的匹配進化史:設計
一、匹配單個字符 /a/regexp
二、匹配多個字符 /cat/對象
三、匹配多個重複字符ip
a. /a+/字符串
b. /a*/
c. /a?/
d./a{m,n}/
e./a{m}/
f./a{m,}/
四、匹配一組字符
[a-z0-9]
[^a] 非a
五、匹配邊界
a. 匹配單詞邊界
\b 單詞的邊界
\B 非單詞的邊界
b. 匹配字符串邊界
^ 字符串的開頭
$ 字符串的結尾
六、使用子表達式
/(ab)/
七、回溯引用
/(a)\1/ \{n}n表明子表達式的相對位置,注意嵌套式的子表達式,位置是從外向裏計算
八、先後查找
a. /a(?=b)/
b. /a(?<=b)/
ps.先後查找的部分不在返回的匹配結果中,僅僅用於位置的肯定
九、嵌入條件
a. /(a)(?(1)b|c)/
b.(a(?(?=b)b|c))
部分元字符說明:
+ 匹配[1,+∞]個字符
* 匹配[0,+∞]個字符
? 匹配[0,1]個字符
說明:先後查找的方向,向左爲向後,向右爲向前
?= 向前查找
?<= 向後查找
(?(condition)true-regexp|false-regexp) 嵌入條件,相似於?的三元運算
condition爲先後查找時:
?= 正前查找
?! 負前查找
?<= 正後查找
?<! 負後查找
以書中反覆提到的一句話做爲結束:
把必需匹配的狀況考慮周全並寫出一個匹配結果符合預期的正則表達式很容易,但把不須要匹配的狀況考慮周全並保證把他們排除在匹配結果之外要困難的多。