元字符
正则表达式里面包含两种东西,一种叫元字符,一种叫原义文本字符。
这么说好像有点故作高深把话讲绕的感觉,简而言之,元字符就是关键字,原义文本字符就是自定义规则字。
元字符,或者叫保留字,表示这些字已经被正则“抢先注册”了,也就是占用了。
正则在抢先注册这些关键字的时候,已经尽量挑了一些比较冷门的字符,如果你就是非要使用这些字符作为自己创建规则的一部分,那么需要手动转义一下,避免与正则关键字发生冲突。
常见的元字符如下:
具意元字符--只匹配单个确切字符
\ 转义字符
| 或
() 分组符
{} 量词符
[] 类符
\n 换行符
\r 回车符
边界匹配元字符--只用于定位,不算在规则里面(注意⚠️:这里的边界只是用来定位的,不参与替换规则,比如\bis\b表示一个小写的is单词,替换成IS的时候,单词边界是不参与的)
^ 开头字符
$ 结尾字符
\b 单词边界字符boundary
预定义类元字符--匹配一类符合条件的字符
. 除换行符和回车符之外的任意单个字符
\d 数字digit
\D 非数字
\w 单词字符word,包括下划线在内,相当等于[A-Za-z0-9_]
\W 非单词
\s 空白符space
\S 非空白
量词元字符--一种用于计数的字符
* 出现任意次
? 出现0次或1次
+ 至少出现一次
{n} 具体出现n次
{m,n} 出现m~n次,如{3,5}表示最少出现3次,最多出现5次
{n,} 最少出现n次
{0, n} 最多出现n次
类
类表示一类字符,我们知道正则跟字符串是一一对应的,但是有时候我们想匹配多种情况,比如"A规则和B规则,只要有一个规则能匹配上就行了",这时候我们就需要类,它里面存放着多个规则,不同规则之间是一种“或”的关系。
简单来说,类就是一堆规则,不是一个规则。
const reg = /[abc]/g
上面这个简单的示例表示只要匹配到a或b或c任意一个就可以了,当然这个类也是可以取反的。
const reg = /[^abc]/g
这里表示,不属于a或b或c任意一个,即不属于这个类里面的任何规则。
在类里面,可以写单个规则字(如a,b,c,1,2,3这种),也可以写范围规则字。这里面所谓的范围规则字一把般只有三种,那就是0-9,a-z, A-Z。
const reg = /a-zA-Z0-9/g
这里面只有三个规则字,分别是a-z、A-Z、0-9。
-并不是元字符,但是,当它左右同时连接了数字或字母时,它就是一个元字符。
我们说类是进行范围匹配的核心,像之前的\d,它能代表任意一个数字,也就是0~9任意哪个都行,实际上它等价于[0-9]。
这种就是预定义类字符,他从类衍生出来,我们可以这么看:预定义类元字符,就相当等于一些常见的类的简写。
总结
正则表达式只由两种东西组成:关键字和自定义规则字。关键字包含四种:一是精确匹配的具意字符,二是只用于定位的边界字符,三是匹配多种情况,由类衍生出来的预定义类字符。自定义规则字,则是我们自己写的业务字符,如"6666", "Linda",'Jack'等等,四是用于计数的量词字符。