正则笔记
六月 01, 2019
正则组成元素:字符和元字符
单字符
特殊字符 | 正则表达式 | 记忆方式 |
---|---|---|
换行符 | \n | new line |
换页符 | \f | form feed |
回车符 | \r | return |
空白符 | \s | space |
制表符 | \t | tab |
垂直制表符 | \v | vertical tab |
回退符 | [\b] | backspace,之所以使用[]符号是避免和\b重复 |
多字符
匹配区间 | 正则表达式 | 记忆方式 |
---|---|---|
除了换行符之外的任何字符 | . | 句号,除了句子结束符 |
单个数字, [0-9] | \d | digit |
除了[0-9] | \D | not digit |
包括下划线在内的单个字符,[A-Za-z0-9_] | \w | word |
非单字字符 | \W | not word |
匹配空白字符,包括空格、制表符、换页符和换行符 | \s | space |
匹配非空白字符 | \S | not space |
循环与重复
? 表示 0 | 1
* 表示 >= 0
+ 表示 >= 1
特定次数
{x}: x次
{min, max}: 介于min次到max次之间
{min, }: 至少min次
{0, max}: 至多max次
匹配规则 | 元字符 | 联想方式 |
---|---|---|
0次或1次 | ? | 且问,此事有还无 |
0次或无数次 | * | 宇宙洪荒,辰宿列张:宇宙伊始,从无到有,最后星宿布满星空 |
1次或无数次 | + | 一加, +1 |
特定次数 | {x}, {min, max} | 可以想象成一个数轴,从一个点,到一个射线再到线段。min和max分别表示了左闭右闭区间的左界和右界 |
位置边界
边界和标志 | 正则表达式 | 记忆方式 |
---|---|---|
单词边界 | \b | boundary |
非单词边界 | \B | not boundary |
字符串开头 | ^ | 小头尖尖那么大个 |
字符串结尾 | $ | 终结者,美国科幻电影,美元符$ |
多行模式 | m标志 | multiple of lines |
忽略大小写 | i标志 | ignore case, case-insensitive |
全局模式 | g标志 | global |
子表达式:分组、回溯引用和逻辑处理
分组:()
回溯引用(backreference)指的是模式的后面部分引用前面已经匹配到的子字符串。
向前查找:(?=regex)
1
"happy happily".replace(/happ(?=ily)/, '-') == "happy -ily"
负前向查找:(?!regex)
1
"happy happily".replace(/happ(?!ily)/, '-') == "-y happily"
后向查找:(?<=regex) !不是每种正则实现都支持后向查找。
负后向查找:(?<!regex)
回溯查找 | 正则 | 记忆方式 |
---|---|---|
引用 | \0,\1,\2 和 $0, $1, $2 | 转义+数字 |
非捕获组 | (?:) | 引用表达式(()), 本身不被消费(?),引用(:) |
前向查找 | (?=) | 引用子表达式(()),本身不被消费(?), 正向的查找(=) |
前向负查找 | (?!) | 引用子表达式(()),本身不被消费(?), 负向的查找(!) |
后向查找 | (?<=) | 引用子表达式(()),本身不被消费(?), 后向的(<,开口往后),正的查找(=) |
后向负查找 | (?<!) | 引用子表达式(()),本身不被消费(?), 后向的(<,开口往后),负的查找(!) |
逻辑处理
逻辑关 | 正则元字符 |
---|---|
与 | 无 |
非 | [^regex]和! |
或 | | |
查看评论