Regular Expression。简写为 regex 或 RegExp。
正则表达式在 JS 中
正则表达式也是对象。
定义方式一般是字面量,用两个斜杠包裹,如:/ab+c/。
或者用 RegExp 构造函数,如:new RegExp('ab+c', 'i')。第一个参数可以是字面量或字符串,第二个参数是标志参数。
RegExp 方法
exec
参数是指定字符串,返回值是一个结果数组或 null。
test
参数是指定字符串,返回值是布尔值。
String 方法
match
参数是正则表达式,返回值是一个结果数组或 null。
matchAll
参数是正则表达式,返回值是一个结果数组或 null,结果数组每个元素也是个数组,其中包括匹配结果和所有捕获组。
search
参数是正则表达式,返回值是匹配结果的索引或 -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:粘连匹配。