《正则表达式必知必会》这本书的确非常的简练实用,准确定位了正则表达式的用途,简明的介绍了正则表达式的基本使用形式。简单易懂,容易记忆,虽然从表面上看这本书的内容比较少而且简单,但是说的内容都是非常基础的砖石,无论想建造多么高大、吊炸天的大楼,基础的砖石都是必不可少的。
看完这本书,受益颇多,在此将书中的内容再次总结,搭起自己对于正则表达式的认识框架。
正则表达式的使用对象:文本/字符串。用途对文本/字符串进行搜索、替换。
正则表达式的基本匹配单位:一个字符。
正则表达式在不同的程序设计语言中,实现会有不同,由于本人是主要是前端工作,所以关注点基本放在javascript上。
正则表达式的匹配进化史:
1、匹配单个字符 /a/
2、匹配多个字符 /cat/
3、匹配多个重复字符
a. /a+/
b. /a*/
c. /a?/
d./a{m,n}/
e./a{m}/
f./a{m,}/
4、匹配一组字符
[a-z0-9]
[^a] 非a
5、匹配边界
a. 匹配单词边界
单词的边界
B 非单词的边界
b. 匹配字符串边界
^ 字符串的开头
$ 字符串的结尾
6、使用子表达式
/(ab)/
7、回溯引用
/(a)1/ {n}n代表子表达式的相对位置,注意嵌套式的子表达式,位置是从外向里计算
8、前后查找
a. /a(?=b)/
b. /a(?<=b)/
ps.前后查找的部分不在返回的匹配结果中,仅仅用于位置的确定
9、嵌入条件
a. /(a)(?(1)b|c)/
b.(a(?(?=b)b|c))
部分元字符说明:
+ 匹配[1,+∞]个字符
* 匹配[0,+∞]个字符
? 匹配[0,1]个字符
说明:前后查找的方向,向左为向后,向右为向前
?= 向前查找
?<= 向后查找
(?(condition)true-regexp|false-regexp) 嵌入条件,类似于?的三元运算
condition为前后查找时:
?= 正前查找
?! 负前查找
?<= 正后查找
?<! 负后查找
以书中反复提到的一句话作为结束:
把必需匹配的情况考虑周全并写出一个匹配结果符合预期的正则表达式很容易,但把不需要匹配的情况考虑周全并保证把他们排除在匹配结果以外要困难的多。