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个值。
方括号中的改变
^
作为第一个字符具有特殊意义-
只有其前后都有字符才有特殊意义- 保留字符仅剩
\
,-
,]
- 不能使用
\B
和捕获的值\编号
\b
匹配"\u0008"
(退格)
版权信息
本文链接:http://zonxin.github.io/post/2016/07/javascript-RegExp-cheetsheet
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。