js正则整理

208 阅读3分钟

正则表达式的好处

正则中的或|

const reg = /aaa|bbb/ 这个意思是匹配必须是aaa,bbb是一个整体匹配,而不是a或b一个字符 原子组和原子表中的或| 原子组(aaa|bbb) 原子表[]这里面就有或的意思

正则中的转义符\

有一些字符在正则表达式中有一些特殊含义,比如. . 1、代表是意思除换行符的任意字符 . 2、代表就是字符串点

那么在写正则的时候如果你就是想匹配字符点那么就要转义 /./ 就是匹配字符点. 而不是任意字符,

注意: 在正则new RegExp中写的是字符串所以跟字面量写转义还不一样,看图片,有一个小技巧,如果你看不明白那就在控制台打印下,在写到new RegExp中

image.png

\d字符串代表就是字符串d,所以在new RegExp中点要\d才是\d代表数字 image.png

正则中的字符边界 ^ $

^开头 但是^如果出现在原子表代表非的意思[^\d] 非数字 $结尾

匹配任意字符

[/s/S] [/d/D] [/w/W]

m多行匹配修饰符(到时候看看例子吧没记录)

我理解的就是一行一行匹配

i与g模式修正符

i代表忽略大小写 g代表全局匹配 s忽略空白包括换行

汉字与字符属性

每一个语言和字符都有对应的属性,我们可以通过属性来正则匹配,比如匹配汉字,韩文,标点符号等,通过网站查找属性,匹配的时候如下还要配合u

语法是\p{属性值}

image.png

原子表中有些字符没别的函数需要注意

[.+]在原子表中就是.和+没有在正则中的特殊含义

+ ? * {} 等正常是贪婪模式, 加上?就是不贪婪

/h\d+/ + 代表1个或者多个,那么贪婪就是多个,默认都是贪婪 但是/h\d+?/就是匹配一个h\d

/h\d*/ * 代表0个或者多个,那么贪婪就是多个,默认都是贪婪 但是/h\d*?/就是匹配一个0个h

/h\d?/ * 代表0个或者一个,那么贪婪就是一个,默认都是贪婪 但是/h\d??/就是匹配0个是h

/h\d{2,3}/ * 代表2个或者3个,那么贪婪就是2个,默认都是贪婪 但是/h\d{2,3}?/就是匹配2个是h和两个数字

'hdddd'.match(/h.?/) 匹配hd 'hdddd'.match(/h.??/) 匹配h

在原子组中有$符号

1配合repalce1 配合repalce 2 配合repalce

在正则原子组匹配中的\1 \2 等等

hhhh

/<(h[1-6])>\w+</\1>/
\1代表的是跟第一个原子组相同的匹配

replace中用正则替换使用$符号

1代表第一个匹配的组1代表第一个匹配的组 2 同上,以此类推

1640702256(1).png

原子组别名

/(?)/ 这就是给这个组起名为link $ 在字符串的match方法中的groups就能看到这个不是undefined了就有值了

字符串方法中使用正则方法replace match matchAll search

正则方法test exec

test验证付不符合正则

exec方法可以看看跟字符串方法macth的区别

正则断言 断言只是条件,不在结果内

?= 匹配后面

/后盾人(?=教程)/ 正则匹配后盾人并且后面后盾人后面有教程两个字的才匹配

注意这个()不是组的意思所以不会放在组里面

?<= 匹配前面 断言这个匹配的前面是否符合条件

?! 断言不等于 限制后面不是谁

?<! 限制前面不等于