在计算机技术中,除计算机编程语言外,个人觉得有还有两项技术算作伟大发明 —— 缓存与正则表达式

RegExp

什么是正则表达式?
正则表达式就是一种描述字符串结构模式的形式化表达式。

正确理解正则表达式

^regexp  这是一个匹配以 regexp 字符开头的文本
正确的理解方式如下
匹配以 r 作为一行的第一个字符, 接着匹配 e, 在匹配 g ... 最后匹配 p 的文本

元字符

元字符 对应说明
. 匹配除换行符之外的任意字符
\w 匹配字母数字下划线,等同于:[a-zA-Z0-9_]
\s 匹配任意空白符
\d 匹配数字,等同于[0-9]
\b 匹配单词边界
| 或匹配,如 /x|y/ 正则可匹配x或y两个字符
^ 匹配字符串的开始
$ 匹配字符串的结束

反义字符

反义字符 对应说明
[^x] 匹配除“x”之外的所有字符,其中“x”可以为任意字符
[^xyz] 同上,匹配除“x、y、z”之外的任意字符
\W 匹配除了字母、数字、下划线之外的所有字符,等同于:[^\w]
\S 匹配除空白符之外的任意字符,等同于:[^\s]
\B 匹配不是单词边界的字符,等同于:[^\b]
\D 匹配不是数字的所有字符,等同于:[^\d]

重复匹配

匹配字符 对应说明
* 重复出现零次或多次
+ 重复出现一次或多次
重复出现零次或一次
{n} 重复出现n次
{n,} 至少重复出现n次
{m,n} 重复重现m到n次,其中,m<n

分组/捕获

分组字符 对应说明
(exp) 用小圆括号进行分组,每一个分组匹配的结果使用 $n 接收, 每一个分组都是一个匹配规则互不影响
(?:exp) 匹配exp正则,但不产生分组号
exp1(?=exp2) 前瞻断言,匹配exp1,但后面必须是exp2
如匹配名字叫xianlie,但不姓zhao的人:/zhao(?=xianlie)/
exp1(?!=exp2) 后瞻断言,匹配exp1,但后面不能是exp2
如匹配姓zhao,但名字不叫xianlie的人:/zhao(?!xianlie)/

贪婪与惰性

相关字符 对应说明
*? 重复任意次,但尽可能少的重复
+? 重复一次或多次,但尽可能少的重复
?? 重复零次或一次,但尽可能少的重复
{m,n}? 重复m到n次,但尽可能少的重复
{n,}? 重复n次以上,但尽可能少的重复
{n}? 重复n次,但尽可能少的重复

修饰符

修饰符 对应说明
i ignoreCase的缩写,表示忽略字母的大小写
g global的缩写,进行全局匹配,即对字符串进行全文匹配,直到字符串遍历结束