正则表达式的基础整理

正则元字符

基本型

  • ^: 集合中表排除,集合外表开始,多行模式也表\n\r之后的位置
  • $: 表结束,多行模式也表\n\r之前的位置
  • {}: 表数量范围
  • (): 表捕获
  • []: 表集合
  • -: 表区间
  • .: 表\n外的所有字符

数量型

  • *: 0次或多次 <=> {0,}
  • +: 1次或多次 <=> {1,}
  • ?: 0次或1次 <=> {0,1}
  • {n}: n次
  • {n,}: n次(含)以上
  • {n,m}: n次(含)以上,m次(含)以下

转义型

基本字符类
  • \d: 表数字 <=> [0-9]
  • \D: <=> [^0-9]
  • \w: 表包括下划线的任何单词字符 <=> [A-Za-z0-9_]
  • \W: <=> [^A-Za-z0-9_]
空白类
  • \b: 表单词边界
  • \B: 表非单词边界
  • \s:表任意空白字符<=>[\f\n\r\t\v]
  • \S:表任意非空白字符<=>[^\f\n\r\t\v]
  • \f:表换页符
  • \n:表换行符
  • \r:表回车符
  • \t:表制表符
  • \v:表垂直制表符
其他类
  • \NUM: 向后引用,NUM为正整数,如(.)\1表两个连续的相同字符
  • \uNUM: 表Unicode字符,NUM为四个十六进制数字表示的Unicode字符,[\u4e00-\u9fa5]*表任意数量的汉字

优先级

优先级 符号
最高 \
()、(?:)、(?=)、[]
*、+、?、{n}、{n,}、{m,n}
^、$、-
最低 分割线(markdown 表格打不出来)

正则表达式的捕获和预查

捕获

(pattern) 匹配并捕获。

1
2
3
var reg = /Java(6|7)/;
reg.exec('Java6')
// ["Java6", "6"]

(?:pattern) 匹配不捕获。

1
2
3
var reg = /Java(?:6|7)/;
reg.exec('Java6')
// ["Java6"]

正向预查

(?=pattern) 正向匹配,不消耗字符

1
2
3
var reg = /Java(?=6|7)/;
reg.exec('Java6')
// ["Java"]

(?!pattern) 正向不匹配,不消耗字符

1
2
3
var reg = /Java(?!6|7)/;
reg.exec('Java8')
// ["Java"]

2、反向预查

JavaScript不支持

(?<=pattern) 反向匹配,不消耗字符

(?<!pattern) 反向不匹配,不消耗字符—