RegExp
正则表达式
作用
语法
- 字面量
- 构造函数
new RegExp(pattern[, flags])
let r1 = /ab+c/i
let r2 = new RegExp('ab+c', 'i')
修饰符
| 字符 |
含义 |
i |
忽略大小写 |
g |
全局匹配 |
m |
多行匹配 |
匹配方式
字符集合
| 字符 |
含义 |
[xyz] |
一个字符集合,也叫字符组。匹配集合中的任意一个字符。可以使用连字符-指定一个范围 |
[^xyz] |
一个反义或补充字符集,也叫反义字符组。匹配任意一个不在括号内的字符。也可以使用连字符-指定一个范围 |
x|y |
匹配|任意一侧的字符(x或y) |
[0-9] |
匹配一个0至9范围内的任意数字 |
[a-z] |
匹配一个a到z范围内的任意字符 |
[A-Z] |
匹配一个A到Z范围内的任意字符 |
[\u4E00-\u9FA5] |
匹配一个汉字 |
元字符
| 字符 |
含义 |
. |
匹配任意单个字符,但是行结束符除外:[^\r\n]。在字符集中,点.失去其特殊含义,并匹配一个字面点.。需要注意的是,m多行标志不会改变点号的表现。因此为了匹配多行中的字符集,可使用[^],它将会匹配任意字符,包括换行符 |
\d |
匹配一个数字。等价于[0-9] |
\w |
匹配一个单词字符,包括字母、数字、下划线。等价于[A-Za-z0-9_] |
\s |
匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。等价于[ \t\r\n\v\f] |
\t |
匹配一个水平制表符 \x09 |
\r |
匹配一个回车符 \x0d |
\n |
匹配一个换行符 \x0a |
\v |
匹配一个垂直制表符 \x0b |
\f |
匹配一个换页符 \x0c |
\D |
匹配一个非数字 [^0-9] |
\W |
匹配一个非单词字符 [^0-9A-Z_a-z] |
\S |
匹配一个非空白符 [^ \t\r\n\v\f] |
[\b] |
匹配一个退格符(不要与\b混淆) |
\0 |
匹配一个NUL字符 |
\xhh |
匹配编码为hh(两个十六进制数字)的字符 |
\uhhhh |
匹配 Unicode 值为hhhh(四个十六进制数字)的字符 |
\ |
转义 |
\cX |
匹配字符串中的一个控制字符。X是A-Z的一个字母。/\cM/匹配字符串中的control-M |
量词
| 字符 |
含义 |
x* |
匹配前面的模式x 0或多次。等价于x{0,} |
x+ |
匹配前面的模式x 1或多次。等价于x{1,} |
x? |
匹配前面的模式x 0或1次。等价于x{0,1} |
x{n} |
n是一个正整数。前面的模式x连续出现n次时匹配 |
x{n,} |
n是一个正整数。前面的模式x连续出现至少n次时匹配 |
x{n,m} |
n和m为正整数。前面的模式x连续出现至少n次,至多m次时匹配 |
x*?
x+?
x??
x{n}?
x{n,}?
x{n,m}? |
像上面一样匹配前面的模式x,然而匹配是最小可能匹配(即非贪婪模式匹配,而上面的是贪婪模式) |
分组和反向引用
| 字符 |
含义 |
(x) |
匹配 x 并且捕获匹配项。这被称为捕获括号。被匹配的子字符串可以在结果数组的元素 [1], ..., [n] 中找到,或在被定义的 RegExp 对象的属性 $1, ..., $9 中找到 |
\n |
n 是一个正整数。一个反向引用,指向正则表达式中第 n 个括号(从左开始数)中匹配的子字符串 |
(?:x) |
匹配 x 不会捕获匹配项。这被称为非捕获括号 |
(?<Name>x) |
命名捕获组。匹配 x,并以 <Name> 指定的名称将其存储在返回匹配项的 groups 属性中(matches.groups.Name) |
边界
| 字符 |
含义 |
^ |
匹配输入开始。如果多行标志被设为 true,该字符也会匹配一个断行符后的开始处 |
$ |
匹配输入结尾。如果多行标志被设为 true,该字符也会匹配一个断行符前的结尾处 |
\b |
匹配一个零宽单词边界,如一个字母与一个空格之间(不要和 [\b] 混淆) |
\B |
匹配一个零宽非单词边界,如两个字母之间或两个空格之间 |
断言
| 字符 |
含义 |
x(?=y) |
仅匹配被 y 跟随的 x |
x(?!y) |
仅匹配不被 y 跟随的 x |
(?<=y)x |
x 只有在 y 后面才匹配 |
(?<!y)x |
x 只有不在 y 后面才匹配 |
特殊字符
| 字符 |
描述 |
[] |
中括号表达式,限定匹配范围 |
{} |
限定符表达式,限定匹配次数 |
() |
标记一个子表达式,并保存匹配结果供后续使用 |
* |
匹配子表达式0次或多次 |
+ |
匹配子表达式1次或多次 |
? |
匹配子表达式0次或1次 |
. |
任意单个字符(除换行符\n、\r) |
\ |
转义或标记字符(\\、\n) |
| |
限定匹配可选项 |
^ |
匹配开头位置(如果再方括号表达式中,表示集合取反) |
$ |
匹配结尾位置 |
优先级
| 字符 |
描述 |
\ |
转义符 |
()
(?:)
(?=)
[] |
圆括号和方括号 |
*
+
?
{n}
{n,}
{n,m} |
限定符 |
^
$
\元字符
任意字符 |
定位和序列 |
| |
或操作符 m|food mood|food (m|f)ood |
示例
- RegExp
- String
- replace
- search
- match
- split
/[0-9]+/.test('abc123') // true
/[a-z]+/.exec('123abc') // ['abc', index: 3, input: '123abc', groups: undefined]
'123abcABC'.replace(/[A-Z]+/, '!') // 123abc!
'123abcABC'.search(/[A-Z]+/) // 6
'123abc456'.match(/\d+/g) // ['123', '456']
'123abc456'.split(/[a-z]+/) // ['123', '456']
'abc123 456def g78h 9ij0'.match(/^[a-z]{3}/)
'abc123 456def g78h 9ij0'.match(/\d$/)
'abc123 456def g78h 9ij0'.match(/\b\d{1,3}/g)
'abc123 456def g78h 9ij0'.match(/\d{1,3}\b/g)
'abc123 456def g78h 9ij0'.match(/\d{1,3}(?=[a-z]{1,3})/g)
'abc123 456def g78h 9ij0'.match(/\d{1,3}(?![a-z]{1,3})/g)
'abc123 456def g78h 9ij0'.match(/(?<=[a-z]{1,3})\d{1,3}/g)
'abc123 456def g78h 9ij0'.match(/(?<![a-z]{1,3})\d{1,3}/g)
'abc123 456def\ng78h 9ij0'.match(/^[a-z]{1,3}/mg)
'abc123 456def\ng78h 9ij0'.match(/^[a-z]{3}(\d{3})[^]*9([a-z]{2})0$/m)
'abc123 456def\ng78h 9ij0'.match(/^[a-z]{3}(?:\d{3})[^]*9([a-z]{2})0$/m)
'abc123 456def\ng78h 9ij0'.match(/^[a-z]{3}(?:\d{3})[^]*9(?:[a-z]{2})0$/m)
'abc123 456def\ng78h 9ij0'.match(/^[a-z]{3}(?<one>\d{3})[^]*9(?<two>[a-z]{2})0$/m)
'abc123 456def\ng78h 9ij0'.match(/^[a-z]{3}(\d{3})[^]*9(?<two>[a-z]{2})0$/m)
'abc123 456def\ng78h 9ij0'.match(/^[a-z]{3}(?:\d{3})[^]*9(?<two>[a-z]{2})0$/m)
'abc123 abc456 456abc'.replace(/^([a-z]{3})\d{3} \1(\d{3}) \2\1$/, '$2,$1')
附录
ASCII
| Dec |
Oct |
Hex |
字符 |
描述 |
| 0 |
00 |
0x00 |
NUL(null) |
空字符 |
| 1 |
01 |
0x01 |
SOH |
标题开始 |
| 2 |
02 |
0x02 |
STX |
正文开始 |
| 3 |
03 |
0x03 |
ETX |
正文结束 |
| 4 |
04 |
0x04 |
EOT |
传输结束 |
| 5 |
05 |
0x05 |
ENQ |
请求 |
| 6 |
06 |
0x06 |
ACK |
收到通知 |
| 7 |
07 |
0x07 |
BEL |
响铃 |
| 8 |
010 |
0x08 |
BS(backspace) |
退格 |
| 9 |
011 |
0x09 |
HT |
水平制表符 |
| 10 |
012 |
0x0A |
LF |
换行键 |
| 11 |
013 |
0x0B |
VT |
垂直制表符 |
| 12 |
014 |
0x0C |
FF |
换页键 |
| 13 |
015 |
0x0D |
CR |
回车键 |
| 14 |
016 |
0x0E |
SO |
不用切换 |
| 15 |
017 |
0x0F |
SI |
启用切换 |
| --- |
--- |
---- |
--- |
--- |
| 16 |
020 |
0x10 |
DLE |
数据链路转义 |
| 17 |
021 |
0x11 |
DC1 |
设备控制1 |
| 18 |
022 |
0x12 |
DC2 |
设备控制2 |
| 19 |
023 |
0x13 |
DC3 |
设备控制3 |
| 20 |
024 |
0x14 |
DC4 |
设备控制4 |
| 21 |
025 |
0x15 |
NAK |
拒绝接收 |
| 22 |
026 |
0x16 |
SYN |
同步空闲 |
| 23 |
027 |
0x17 |
ETB |
结束传输块 |
| 24 |
030 |
0x18 |
CAN |
取消 |
| 25 |
031 |
0x19 |
EM |
媒介结束 |
| 26 |
032 |
0x1A |
SUB |
代替 |
| 27 |
033 |
0x1B |
ESC |
换码(溢出) |
| 28 |
034 |
0x1C |
FS |
文件分隔符 |
| 29 |
035 |
0x1D |
GS |
分组符 |
| 30 |
036 |
0x1E |
RS |
记录分隔符 |
| 31 |
037 |
0x1F |
US |
单元分隔符 |
| --- |
--- |
---- |
--- |
--- |
| 32 |
040 |
0x20 |
(space) |
空格 |
| 33 |
041 |
0x21 |
! |
叹号 |
| 34 |
042 |
0x22 |
" |
双引号 |
| 35 |
043 |
0x23 |
# |
井号 |
| 36 |
044 |
0x24 |
$ |
美元符 |
| 37 |
045 |
0x25 |
% |
百分号 |
| 38 |
046 |
0x26 |
& |
与号 |
| 39 |
047 |
0x27 |
' |
单引号 |
| 40 |
050 |
0x28 |
( |
开括号 |
| 41 |
051 |
0x29 |
) |
闭括号 |
| 42 |
052 |
0x2A |
* |
星号 |
| 43 |
053 |
0x2B |
+ |
加号 |
| 44 |
054 |
0x2C |
, |
逗号 |
| 45 |
055 |
0x2D |
- |
减号 |
| 46 |
056 |
0x2E |
. |
句号 |
| 47 |
057 |
0x2F |
/ |
斜杠 |
| --- |
--- |
---- |
--- |
--- |
| 48 |
060 |
0x30 |
0 |
字符0 |
| 49 |
061 |
0x31 |
1 |
字符1 |
| 50 |
062 |
0x32 |
2 |
字符2 |
| 51 |
063 |
0x33 |
3 |
字符3 |
| 52 |
064 |
0x34 |
4 |
字符4 |
| 53 |
065 |
0x35 |
5 |
字符5 |
| 54 |
066 |
0x36 |
6 |
字符6 |
| 55 |
067 |
0x37 |
7 |
字符7 |
| 56 |
070 |
0x38 |
8 |
字符8 |
| 57 |
071 |
0x39 |
9 |
字符9 |
| --- |
--- |
---- |
--- |
--- |
| 58 |
072 |
0x3A |
: |
冒号 |
| 59 |
073 |
0x3B |
; |
分号 |
| 60 |
074 |
0x3C |
< |
小于 |
| 61 |
075 |
0x3D |
= |
等号 |
| 62 |
076 |
0x3E |
> |
大于 |
| 63 |
077 |
0x3F |
? |
问号 |
| --- |
--- |
---- |
--- |
--- |
| 64 |
100 |
0x40 |
@ |
电子邮件符号 |
| --- |
--- |
---- |
--- |
--- |
| 65 |
101 |
0x41 |
A |
大写字母A |
| 66 |
102 |
0x42 |
B |
大写字母B |
| 67 |
103 |
0x43 |
C |
大写字母C |
| 68 |
104 |
0x44 |
D |
大写字母D |
| 69 |
105 |
0x45 |
E |
大写字母E |
| 70 |
106 |
0x46 |
F |
大写字母F |
| 71 |
107 |
0x47 |
G |
大写字母G |
| 72 |
110 |
0x48 |
H |
大写字母H |
| 73 |
111 |
0x49 |
I |
大写字母I |
| 74 |
112 |
0x4A |
J |
大写字母J |
| 75 |
113 |
0x4B |
K |
大写字母K |
| 76 |
114 |
0x4C |
L |
大写字母L |
| 77 |
115 |
0x4D |
M |
大写字母M |
| 78 |
116 |
0x4E |
N |
大写字母N |
| 79 |
117 |
0x4F |
O |
大写字母O |
| --- |
--- |
---- |
--- |
--- |
| 80 |
120 |
0x50 |
P |
大写字母P |
| 81 |
121 |
0x51 |
Q |
大写字母Q |
| 82 |
122 |
0x52 |
R |
大写字母R |
| 83 |
123 |
0x53 |
S |
大写字母S |
| 84 |
124 |
0x54 |
T |
大写字母T |
| 85 |
125 |
0x55 |
U |
大写字母U |
| 86 |
126 |
0x56 |
V |
大写字母V |
| 87 |
127 |
0x57 |
W |
大写字母W |
| 88 |
130 |
0x58 |
X |
大写字母X |
| 89 |
131 |
0x59 |
Y |
大写字母Y |
| 90 |
132 |
0x5A |
Z |
大写字母Z |
| --- |
--- |
---- |
--- |
--- |
| 91 |
133 |
0x5B |
[ |
开方括号 |
| 92 |
134 |
0x5C |
\ |
反斜杠 |
| 93 |
135 |
0x5D |
] |
闭方括号 |
| 94 |
136 |
0x5E |
^ |
脱字符 |
| 95 |
137 |
0x5F |
_ |
下划线 |
| --- |
--- |
---- |
--- |
--- |
| 96 |
140 |
0x60 |
` |
开单引号 |
| --- |
--- |
---- |
--- |
--- |
| 97 |
141 |
0x61 |
a |
小写字母a |
| 98 |
142 |
0x62 |
b |
小写字母b |
| 99 |
143 |
0x63 |
c |
小写字母c |
| 100 |
144 |
0x64 |
d |
小写字母d |
| 101 |
145 |
0x65 |
e |
小写字母e |
| 102 |
146 |
0x66 |
f |
小写字母f |
| 103 |
147 |
0x67 |
g |
小写字母g |
| 104 |
150 |
0x68 |
h |
小写字母h |
| 105 |
151 |
0x69 |
i |
小写字母i |
| 106 |
152 |
0x6A |
j |
小写字母j |
| 107 |
153 |
0x6B |
k |
小写字母k |
| 108 |
154 |
0x6C |
l |
小写字母l |
| 109 |
155 |
0x6D |
m |
小写字母m |
| 110 |
156 |
0x6E |
n |
小写字母n |
| 111 |
157 |
0x6F |
o |
小写字母o |
| --- |
--- |
---- |
--- |
--- |
| 112 |
160 |
0x70 |
p |
小写字母p |
| 113 |
161 |
0x71 |
q |
小写字母q |
| 114 |
162 |
0x72 |
r |
小写字母r |
| 115 |
163 |
0x73 |
s |
小写字母s |
| 116 |
164 |
0x74 |
t |
小写字母t |
| 117 |
165 |
0x75 |
u |
小写字母u |
| 118 |
166 |
0x76 |
v |
小写字母v |
| 119 |
167 |
0x77 |
w |
小写字母w |
| 120 |
170 |
0x78 |
x |
小写字母x |
| 121 |
171 |
0x79 |
y |
小写字母y |
| 122 |
172 |
0x7A |
z |
小写字母z |
| --- |
--- |
---- |
--- |
--- |
| 123 |
173 |
0x7B |
{ |
开花括号 |
| 124 |
174 |
0x7C |
| |
垂线 |
| 125 |
175 |
0x7D |
} |
闭花括号 |
| 126 |
176 |
0x7E |
~ |
波浪号 |
| 127 |
177 |
0x7F |
DEL(delete) |
删除 |
符号实体
| 实体编号 |
实体名称 |
显示 |
结果 |
描述 |
" |
" |
" |
" |
引号 |
& |
& |
& |
& |
和号 |
' |
' |
' |
' |
撇号 |
< |
< |
< |
< |
小于号 |
> |
> |
> |
> |
大于号 |
  |
|
|
|
空格(space) |
| --------- |
---------- |
------- |
--- |
--- |
¥ |
¥ |
¥ |
¥ |
元 |
© |
© |
© |
© |
版权 |
® |
® |
® |
® |
注册商标 |
· |
· |
· |
· |
中间点 |
× |
× |
× |
× |
乘号 |
÷ |
÷ |
÷ |
÷ |
除号 |
  |
  |
|
|
空格(1/2个汉字宽度) |
  |
  |
|
|
空格(1个汉字宽度) |
| --------- |
---------- |
------- |
--- |
--- |
‘ |
‘ |
‘ |
‘ |
左单引号 |
’ |
’ |
’ |
’ |
右单引号 |
“ |
“ |
“ |
“ |
左双引号 |
” |
” |
” |
” |
右双引号 |
• |
• |
• |
• |
圆点 |
′ |
′ |
′ |
′ |
分 |
″ |
″ |
″ |
″ |
秒 |
| --------- |
---------- |
------- |
--- |
--- |
← |
← |
← |
← |
左箭头 |
↑ |
↑ |
↑ |
↑ |
上箭头 |
→ |
→ |
→ |
→ |
右箭头 |
↓ |
↓ |
↓ |
↓ |
下箭头 |
↔ |
↔ |
↔ |
↔ |
左右箭头 |
| --------- |
---------- |
------- |
--- |
--- |
≠ |
≠ |
≠ |
≠ |
不等于 |
≡ |
≡ |
≡ |
≡ |
等价 |
≤ |
≤ |
≤ |
≤ |
小于等于 |
≥ |
≥ |
≥ |
≥ |
大于等于 |
⋅ |
⋅ |
⋅ |
⋅ |
点运算符 |
| --------- |
---------- |
------- |
--- |
--- |
♠ |
♠ |
♠ |
♠ |
黑桃 |
♣ |
♣ |
♣ |
♣ |
梅花 |
♥ |
♥ |
♥ |
♥ |
红心 |
♦ |
♦ |
♦ |
♦ |
方块 |