正则表达式

Regular Expression。简写为 regex 或 RegExp。

正则表达式在 JS 中

正则表达式也是对象。

定义方式一般是字面量,用两个斜杠包裹,如:/ab+c/

或者用 RegExp 构造函数,如:new RegExp('ab+c', 'i')。第一个参数可以是字面量或字符串,第二个参数是标志参数。

RegExp 方法

exec

参数是指定字符串,返回值是一个结果数组或 null。

test

参数是指定字符串,返回值是布尔值。

String 方法

match

参数是正则表达式,返回值是一个结果数组或 null。

matchAll

参数是正则表达式,返回值是一个结果数组或 null,结果数组每个元素也是个数组,其中包括匹配结果和所有捕获组。

参数是正则表达式,返回值是匹配结果的索引或 -1。

replace

参数是正则表达式和替换字符串,返回值是替换后的字符串。

split

参数是正则表达式,返回值是一个字符串数组。

正则表达式的特殊字符

  • ^:匹配输入的开始。
  • $:匹配输入的结束。
  • n{X}:匹配包含 X 个 n 的序列的字符串。
  • n{X,Y}:匹配包含 X 至 Y 个 n 的序列的字符串。
  • n{X,}:匹配包含至少 X 个 n 的序列的字符串。
  • *:匹配前面的子表达式零次或多次。等价于 {0,}
  • +:匹配前面的子表达式一次或多次。等价于 {1,}
  • ?:匹配前面的子表达式零次或一次。等价于 {0,1}
  • ?:紧跟在量词 *、 +、? 或 {} 的后面,表示在非贪婪匹配中,匹配尽量少的字符。
  • x(?=y):先行断言,匹配 ‘x’ 仅当 ‘x’ 后面跟着 ‘y’。即正向肯定预查。
  • x(?!y):匹配 ‘x’ 仅当 ‘x’ 后面不跟着 ‘y’。即正向否定预查。
  • (?<=y)x:后行断言,匹配 ‘x’ 仅当 ‘x’ 前面是 ‘y’。即反向肯定预查。
  • (?<!y)x:匹配 ‘x’ 仅当 ‘x’ 前面不是 ‘y’。即反向否定预查。
  • .:匹配除换行符 \n 之外的任何单个字符。
  • (x):匹配 ‘x’ 并且记住匹配项。即捕获组。
  • (?:x):匹配 ‘x’ 但是不记住匹配项。即非捕获组。
  • x|y:匹配 ‘x’ 或 ‘y’。
  • [xyz]:字符集合,匹配包含的任一字符。
  • [^xyz]:反向字符集合,匹配未包含的任一字符。
  • \f:匹配一个换页符。
  • \n:匹配一个换行符。
  • \r:匹配一个回车符。
  • \t:匹配一个制表符。
  • \v:匹配一个垂直制表符。
  • \s:匹配任何空白字符,包括空格、制表符、换页符等。等价于 [\f\n\r\t\v]
  • \d:匹配一个数字字符。等价于 [0-9]
  • \D:匹配一个非数字字符。等价于 [^0-9]
  • \S:匹配任何非空白字符。等价于 [^\f\n\r\t\v]
  • \w:匹配包括下划线的任何单词字符。等价于 [A-Za-z0-9_]
  • \W:匹配任何非单词字符。等价于 [^A-Za-z0-9_]
  • \b:匹配一个单词边界,即字与空格间的位置。
  • \B:匹配非单词边界。
  • [\b]: 匹配退格键。
  • \0:匹配一个 NUL 字符。
  • \x:x 为数字,返回第 x 个捕获组的匹配。
  • \xxx:匹配由八进制数 xxx 指定的字符。
  • \xdd:匹配由十六进制数 dd 指定的字符。
  • \uxxxx:匹配由十六进制数 xxxx 指定的 Unicode 字符。

正则表达式的标志

  • g:全局匹配。
  • i:不区分大小写。
  • m:多行匹配。
  • s:允许 . 匹配换行符。
  • u:启用 Unicode 匹配。
  • y:粘连匹配。