正则表达式速查表
验证某个模式是否获得预期的匹配结果并不难,但如何验证它不会匹配到你不想要的东西就没那么简单了。
匹配单个字符
- 直接输入字符
.
匹配任何单个字符- 使用
\
进行转义
匹配一组字符
- 使用元字符
[
和]
来定义一个字符集合 - 合法的字符区间
0-9
匹配所有数字A-Z
a-z
A-z
会包含在Z
和a
之间的字符
- 使用元字符
^
对一个字符集合进行取非匹配
使用元字符
- 匹配空白字符
[\b]
回退(Backspace)\f
换页符\n
换行符\r
回车符\t
制表符tab\v
垂直制表符
Windows使用\r\n结束文本行,Unix和Linux使用\n
- 匹配数字
\d
任何一个数字字符,等价于[0-9]
\D
任何一个非数字字符,等价于[^0-9]
- 匹配字母和数字
\w
任何一个字母数字字符(不区分大小写)或下划线字符,等价于[a-zA-Z0-9_]
\W
任何一个非字母数字与非下划线字符,等价于[^a-zA-Z0-9_]
- 匹配空白字符
\s
任何一个空白字符,等价于[\f\n\r\t\v]
\S
任何一个非空白字符,等价于[^\f\n\r\t\v]
重复匹配
+
匹配一个或多个字符- 匹配零个或多个字符
?
匹配零个或一个字符{
和}
用来设定重复次数- 一个数字设定一个精确的值,例如
{3}
- 两个数字设定一个区间,例如
{2,4}
- 省略最大值,至少重复多少次,例如
{3,}
- 一个数字设定一个精确的值,例如
+
和都是贪婪型元字符,尽量多匹配,可以使用懒惰型版本,尽量少匹配。在贪婪型元字符后加上一个?
。+
和+?
- 和
?
{3,}
和{3,}?
位置匹配
\b
单词边界,用来匹配一个单词的开头或结尾。(只有字母数字和下划线,也就是\w
相匹配的字符可以构成单词,不能)\B
不匹配一个单词边界。\B-\B
,要注意中间放的本身不是单词字符的情况。- 字符串边界,
^
字符串开头,$
字符串结尾。 - 分行匹配模式,使用
(?m)
记号启用分行匹配模式,该模式将换行视为字符串分隔,必须出现在整个模式的最前面。例如(?m)^\s*//.$
,匹配JavaScript//
注释。
可选标识符
g
包含所有匹配i
不区分大小写
子表达式
- 子表达式用
(
和)
括起来,将被视为一个独立元素。 - 子表达式允许多层嵌套。
逻辑操作符
|
是或操作符,例如10|20
将匹配19或20。
回溯引用:前后一致匹配
\1
代表着模式里的第一个子表达式。\2
和\3
依次类推。- 在JavaScript中使用
$1
等来进行替换。
前后查找
- JavaScript只支持向前查找。
(?=:)
不会匹配到:
,它表示:
之前的内容。(?!:)
表示向前查找取非。
正则表达式在JavaScript中的实现
- JavaScript中跟正则表达式相关的方法:
- exec:
- match:
- replace:
- search:
- split:
- test:
g
选项激活全局搜索功能,i
不区分字母大小写。m
支持多行字符串,s
支持单行字符串,x
忽略正则表达式模式里的空白字符。- 在使用回溯引用的时候,
$'
返回匹配字符串前面的所有东西,$`返回被匹配字符串后面的所有东西,$+
将返回最后一个匹配的子表达式,$&
将返回被匹配到的所有东西。 - JavaScript提供了一个名为
RegExp
的全局对象,在执行完一个正则表达式后,可以通过这个对象获得这次执行有关的信息。