1:正则要么匹配字符,要么匹配位置
2:可以使用括号捕获数据。可以在api中分组引用
3:横向模糊匹配是指 使用量词表示非固定的字符 /ab{2,4}c/ => 'abb' 'abbb' 'abbbb'
4:纵向模糊匹配是指使用[abc] 表示可以是中括号中的某一个 /a[cbd]b/ => 'acb' 'abb' 'adb'
5:范围表示法[0123456abcdef] =>[0-6a-f]
6:排除字符组 [^abc] 就是非abc 字符组开头是^表示取反。
7:其他字符组的简写
d === [0-9]
D === [^0-9] 非数字
w === [0-9a-zA-Z_] 数字字母下划线
W ==== [^0-9a-zA-Z_] 非数字,非字母,非下划线
s ==== [ v f] 空格 ,水平制表符 垂直制表符,换行符,回车符,换页符
S === [^ v f] 非空白符
. 通配符 除了换行符,回车符,行分隔符,段落分隔符外的其他字符
如果想匹配任何字符[dD] [wW] [^] [sS]
8:量词
{m,} 至少m次
?等价于 {0,1} 至少1次
{m}等价于{m} 出现m次
+ 等价于{1,} ,至少出现1次
* 等价于 {0,}出现任意次
9:贪婪匹配和惰性匹配
量词后面拼?表示惰性匹配
{m,n}?
{m,}?
??
+?
*?
10: 匹配位置
有6个锚字符 ^ $ B (?=p)
(?!p)
^ ----- 开头
$ ----- 结尾
----- 单词边界 具体就是w 和W 之间的位置,包括w 和 ^ ,w 和$之间的位置
B --- -- 非单词边界 具体就是w与w ,W与W,W与^,W与$之间的位置。
(?=p) 其中p是一个子模式,即p前面的位置
比如(?=a)
var result = "dayu".replace(/(?=a)/g, '#');
console.log(result); // => "d#ayu"
(?!p) 非 上述
参考文章https://juejin.cn/post/6844903487155732494#heading-18