一. 正则语法
1. 字符
- 普通字符:按字面意义匹配
- 元字符
\d
任意数字字符,等价 [0-9]\w
任意字母数字字符,等价 [A-Za-z0-9_]
- 特殊字符
\
转义字符,用于匹配特殊字符本身.
任意字符(除换行符 \n 之外)|
用于指定多种模式的选择,如 m|food 会匹配 m 或 food,要想匹配 mood 或 food,需要使用 (m|f)ood
- 字符集合
[ ]
匹配括号内的任意一个字符。例如,[abc] 匹配字符 a、b 或 c[^ ]
匹配除了括号内的字符以外的任意一个字符。例如,[^abc] 匹配除了字符 a、b 、c 以外的任意字符
2. 量词
*
匹配前面的模式零次或多次,等价 {0,}+
匹配前面的模式一次或多次,等价 {1,}?
匹配前面的模式零次或一次,等价 {0,1},在其他限定符(*, +, ?, {n}, {n,}, {n,m})之后使用 ? 使匹配是非贪婪的,会尽可能少的匹配字符串。如 ‘o+?’ 将匹配单个 o{n}
匹配前面的模式 n 次{n,}
匹配前面的模式至少 n 次{n,m}
匹配前面的模式至少 n 次且不超过 m 次
3. 边界匹配
^
匹配字符串的开头$
匹配字符串的结尾\b
匹配一个单词边界,即字与空格间的位置
4. 分组
( )
用于分组并捕获(缓存)子表达式(?: )
用于分组但不捕获子表达式\num
反向应用,和 () 一起使用,匹配第 num 个分组的匹配的内容,如 (x)(y)\2 会匹配 xyy,这里的 \2 指的是第二个分组的 yexp1(?=exp2)
查找 exp2 前的 exp1(?<=exp2)exp1
查找 exp2 后面的 exp1exp1(?!exp2)
查找后面不是 exp2 的 exp1(?<!exp2)exp1
查找前面不是 exp2 的 exp1
5. 修饰符
i
将匹配设置为不区分大小写(ignore)g
全局匹配,查找所有的匹配项(global)m
多行匹配,使边界字符 ^ 和 $ 匹配每一行的开头和结尾
6. 运算符优先级
相同优先级从左到右进行计算
不同优先级从高到低分别为:
- 转义字符 :
\
- 方括号和圆括号:
(),(?:),[]
- 位置和顺序:
^,$,字符
- 或操作:
|
二. 正则表达式示例
语法:/正则表达式主体/修饰符(可选)
- 中文正则:
/[\u4E00-\u9FA5]/
- 中国手机号:
/1((3\d)|(4[5-79])|(5[0-35-9])|(6[5-7])|(7[0-8])|(8\d)|(9[189]))\d{8}/