文本字符
字符 | 匹配内容 |
---|---|
字母字符 | 本身 |
\0 | NULL 字符(\u0000) |
\t | Tab 制表符(\u0009) |
\n | 换行(\u000A) |
\v | 垂直制表符(\u000B) |
\f | 换页符(\u000C) |
\r | 回车(\u000D) |
\xFF | 由两位十六进制数转义为拉丁字母,比如 \x0A 相当于 \n |
\uFFFF | 由四位十六进制数转义为 Unicode 字符,比如 \u0009 相当于 \t |
1. 一些标点符号在正则表达式中由特殊的意义:
^ $ . * + ? = ! : | \ / ( ) [ ] { }
要想匹配上述字符,需要用 \ 转义
2. 如果记不住哪些标点符号由特殊意义,那么就在所有标点符号前放置 \ 进行转义。要匹配 \ ,用 \ 转义。
字符类
将字面值字符放进方括号内就组成了字符类。
字符 | 匹配内容 |
---|---|
[…] | 在方括号内的任意一个字符 |
[^…] | 任意一个不在方括号内的字符 |
. | 除换行或其它 Unicode 行终止符之外的任意字符 |
\w | 任意 ASCII 字符,等价于 [a-zA-Z0-9_] |
\W | 任意非 ASCII 字符,等价于 [^a-zA-Z0-9_] |
\s | 任意 Unicode 空白字符 |
\S | 任意非 Unicode 空白字符,注意 \w 和 \S 不同 |
\d | 任意 ASCII 数字,等价于 [0-9] |
\D | 任意非 ASCII 数字字符,等价于 [^0-9] |
[\b] | 退格,只有作为字符类单独元素才表示退格,否则有特殊含义 |
重复
字符 | 匹配内容 |
---|---|
{n,m} | 匹配前面条目至少 n 次,最多 m 次 |
{n,} | 匹配前面条目 n 次以上 |
{n} | 匹配前面条目正好 n 次 |
? | 匹配前面条目出现 0 次或 1 次,相当于 {0,1} |
+ | 匹配前面条目 1 次以上,相当于 {1,} |
* | 匹配前面条目 0 次或 多次,相当于 {0,} |
1. 上表中的匹配是尽可能多地匹配,而且允许后续正则表达式继续匹配,称之为”贪婪匹配”。a+ 匹配 “aaa”,会匹配三个字符
2. 我们可以使用非贪婪匹配,只需要在后面跟随一个 ? 号即可:“??”, “+?”, “*?”, “{1,5}?”。a+? 匹配 “aaa”,只匹配第一个 a
选择,组合和引用
字符 | 含义 |
---|---|
| | 选择,匹配左边的子表达式或右边的子表达式 |
(…) | 组合,将多个项目组合成为一个单元,可以对该单元使用 *, +, ?, |
(?:…) | 只组合,将多个项目组合为一个单元,但是所匹配的子字符串不创建引用 |
\n | 引用,代表组号为 n 的组合所首次匹配的子字符串,组号是按从左往右计算 左括号出现的顺序而得出的,(?: 格式的组合不被标记组号 |
指定匹配位置
字符 | 含义 |
---|---|
^ | 匹配字符串的开头,在多行查找中,匹配行首 |
$ | 匹配字符串的结尾,在多行查找中匹配行尾 |
\b | 匹配单词边界,匹配 \w 和 \W 之间或者 \w 和 字符串的开头或结尾 之间的位置(然而,[\b]匹配退格) |
\B | 匹配不是单词边界的位置 |
(?=p) | 一个积极先行断言,要求接下来的字符串匹配模式 p, 但是并不将这些字符串包含在匹配中 |
(?!p) | 一个消极先行断言,要求接下来的字符串不匹配模式 p |
标记
字符 | 含义 |
---|---|
i | 忽略大小写 |
g | 全局匹配,找到所有匹配而不是在第一个匹配处停止 |
m | 多行模式,^ 匹配行首或字符串开头,$ 匹配行尾或字符串结尾 |
参考资料
[1] (JavaScript: The.Definitive.Guide).David.Flanagan “JavaScript 权威指南-第六版”