正则表达式速查表
验证某个模式是否获得预期的匹配结果并不难,但如何验证它不会匹配到你不想要的东西就没那么简单了。
匹配单个字符
- 直接输入字符
.匹配任何单个字符- 使用
\进行转义
匹配一组字符
- 使用元字符
[和]来定义一个字符集合 - 合法的字符区间
0-9匹配所有数字A-Za-zA-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的全局对象,在执行完一个正则表达式后,可以通过这个对象获得这次执行有关的信息。