JS正则表达式CheetSheet

今天仔细研读了一下 ES2015 标准中的正则表达式部分,作此留念,方便查阅。 ES2015 和 ES5.1 在正则上的区别是: ES5.1 不支持 “\u{HH..H}”。 保留符号: ^, $, \, ., *, +, ?, (, ), [, ], {, }, |,/

元字符
.除换行之外的字符
非保留符号匹配此字符
\保留符号匹配保留符号
\d匹配任意数字[0-9]
\D匹配任意非数字[^0-9]
\s匹配任何空白字符[\f\n\r\t\v]
\S匹配任何非空白字符[^\f\n\r\t\v]
\w匹配任何单词字符[A-Za-z0-9_]
\W匹配任何非单词字符
abc | xyz匹配 abc 或 xyz
[xyz]其中的一个字符
[^xyz]非其中的字符
\f匹配"\u000C",换页符
\n匹配"\u000A",换行
\r匹配"\u000D",回车
\t匹配"\u0009",制表
\v匹配"\u000B",垂直制表符
\0匹配"\u0000",NULL
\xHH H 表示一位16进制数字,匹配"\xHH"
\uHHHH匹配"\uHHHH"
\u{任意个H}匹配"\u{HH…H}"
\cx Ctrl-x(x是任意字母,不区分大小写)
(a-z分别表示"0x01"-"0x1A")
捕获
(表达式)捕获(编号从1开始)+改变优先级
(?:表达式)改变优先级,不捕获
\编号前面捕获的值[注1]
匹配位置
^起始
$结束
\b单词边界
\B非单词边界
(?=表达式)后面匹配"表达式"的位置
(?!表达式)后面不匹配"表达式"的位置
量词
?匹配前面的子表达式 0 次或 1 次(尽可能多)
*匹配前面的子表达式任意次(尽可能多)
+匹配前面的子表达式 1 次或多次(尽可能多)
{n}匹配子表达式 n 次
{n,}匹配子表达式大于等于 n次(尽可能多)
{n,m}最少匹配 n 次且最多匹配 m 次(尽可能多)
??匹配前面的子表达式 0 次或 1 次(尽可能少)
*?匹配前面的子表达式任意次(尽可能少)
+?匹配前面的子表达式 1 次或多次(尽可能少)
{n}?匹配子表达式 n 次(跟贪婪模式一样)
{n,}?匹配子表达式大于等于 n次(尽可能少)
{n,m}?最少匹配 n 次且最多匹配 m 次(尽可能少)

注1: 在未捕获到值之前\数字会被大部分值JS引擎解释八进制数对应的值,比如\1(a)\1 会匹配 "\x01aa"\11匹配”\x09”。但是ES标准里面要求这种情况要抛出异常。另外,\数字\ 后所有的数字作为一起,比如\11(\1)1不等价,\11匹配捕获到的第11个值。

方括号中的改变
  1. ^ 作为第一个字符具有特殊意义
  2. - 只有其前后都有字符才有特殊意义
  3. 保留字符仅剩 \-]
  4. 不能使用 \B 和捕获的值 \编号
  5. \b 匹配 "\u0008"(退格)