①正则就是匹配模式,要么匹配位置,要么匹配字符;
②匹配位置:
1、^:匹配开头的位置,当正则有修饰符 m 时(多行文本),表示匹配行开头位置;
2、$:匹配结尾的位置,当正则有修饰符 m 时(多行文本),表示匹配行结尾位置;
3、\b:匹配单词边界;
4、\B:匹配非单词边界;
5、(?=表达式):正向先行断言:(?=表达式),指在某个位置的右侧必须能匹配表达式;
6、(?!表达式):反向先行断言:(?!表达式),指在某个位置的右侧不能匹配表达式;
7、(?<=表达式):正向后行断言:(?<=表达式),指在某个位置的左侧必须能匹配表达式。注意: 先行断言和后行断言只有一个区别,即先行断言从左往右看,后行断言从右往左看;
8、(?<!表达式):反向后行断言:(?<!表达式),指在某个位置的左侧不能匹配表达式;
③匹配字符:
1、字母、数字:匹配字符本身;
2、\0:匹配 NULL 字符;
3、\t:匹配水平制表符;
4、\v:匹配垂直制表符;
5、\n:匹配换行符;
6、\r:匹配回车符;
7、\f:匹配换页符;
8、\xnn:匹配拉丁字符;
9、\uxxxx:匹配 Unicode 字符。比如 \u2028 匹配行终止符,\u2029 匹配段终止符;
10、\cX:匹配 ctrl+X;
11、[\b]:匹配 Backspace 键(特殊记忆);
④匹配字符组:
1、[abc]:匹配 "a"、"b"、"c" 其中任何一个字符;
2、[a-d1-4]:匹配 "a"、"b"、"c"、"d"、"1"、"2"、"3"、"4" 其中任何一个字符;
3、[^abc]:匹配除了 "a"、"b"、"c" 之外的任何一个字符;
4、[^a-d1-4] :匹配除了 "a"、"b"、"c"、"d"、"1"、"2"、"3"、"4" 之外的任何一个字符;
5、.:通配符,匹配除了少数字符(\n)之外的任意字符;
6、\d:匹配数字,等价于 [0-9];
7、\D:匹配非数字,等价于 [^0-9];
8、\w:匹配单词字符,等价于 [a-zA-Z0-9_];
9、\W:匹配非单词字符,等价于 [^a-zA-Z0-9_];
10、\s:匹配空白符,等价于 [ \t\v\n\r\f];
11、\S:匹配非空白符,等价于 [^ \t\v\n\r\f];
⑤量词:
1、{n,m}:连续出现 n 到 m 次。贪婪模式;
2、{n,}:至少连续出现 n 次。贪婪模式;
3、{n}:连续出现 n 次。贪婪模式;
4、?:等价于 {0,1}。贪婪模式;
5、+:等价于 {1,}。贪婪模式;
6、*:等价于 {0,}。贪婪模式;
7、{n,m}?:连续出现 n 到 m 次。惰性模式。最多匹配到 n 个;
8、{n,}?:至少连续出现 n 次。惰性模式。最多匹配到 n 个;
9、{n}?:连续出现 n 次。惰性模式;
10、??:等价于 {0,1}?。惰性模式;
11、+?:等价于 {1,}?。惰性模式;
12、*?:等价于 {0,}?。惰性模式;
⑥括号:
1、(ab):捕获型分组。把 "ab" 当成一个整体,比如 (ab)+ 表示 "ab" 至少连续出现一次;
2、(?:ab):非捕获型分组。与 (ab) 的区别是,它不捕获数据;
3、(good|nice):捕获型分支结构。匹配 "good" 或 "nice";
4、(?:good|nice):非捕获型分支结构。与 (good|nice) 的区别是,它不捕获数据;
5、\num:反向引用。比如 \2,表示引用的是第二个括号里的捕获的数据;
⑦修饰符:
1、g:global 简写,全局匹配,找到所有满足匹配的子串,而不是默认只匹配首次结果;
2、i:ignore case 简写,匹配过程中,忽略英文字母大小写,如 /test/i 可以匹配 Test、teSt、TesT 等;
3、m:multiline 简写,多行匹配,把 ^ 和 $ 变成行开头和行结尾。比如可以匹配文本域(textarea)元素中的值;
4、u:unicode 简写,允许使用 Unicode 点转义符;
5、y:sticky 简写,开启粘连匹配,正则表达式执行粘连匹配时试图从最后一个匹配位置开始
(参考:mp.weixin.qq.com/s/rv8wyoo3m…