前言
正则表达式中有各种的操作符,当各种操作符碰在一起哪个优先级最高呢?下面我们就来看一下正则中的操作符及其优先级。
结构
在了解操作符之前我们先看下结构。结构:特殊字符与普通字符构成的整体,操作符往往出现在结构当中。具体的结构有以下几种:
- 字符组:用[]表示,表示匹配的多种情况,比如[0-5]。
- 字面量:最基本的结构,表示匹配的字符,比如:/1/匹配字符1。
- 锚:用?:p表示,p是表达式,表示匹配的位置,比如?:1,匹配1之前出现的位置。
- 量词:用{}表示,表示匹配字符的次数,比如:{1,2}匹配一到两次。
- 分组:用()表示,一个括号代表着一个整体。比如:(12),匹配12。
- 分支:用|表示,匹配多个表达式中的一个。比如:1|2,匹配1或者2。 上述结构之前我们都讲解用过,这里正好整理对比一下各个结构。
操作符
操作符就出现在以上的结构当中,从上往下的优先级依次为:
- 转义符————\
- 括号、方括号————()、[]
- 量词————{m,n}、?等
- 位置————^、$等
- 竖杠——| 知道了优先级,我们可以简单分析一个案例:
const reg = /12(3)?|45/
根据优先级分析如下:此表达式没有转义符,所以括号优先级最好,也就是说(3)是一个整体,而(3)跟了一个量词?,此时就变成了(3)?就是一个整体,对于分支左边12为整体,(3)?为整体,右边分支就是45;整体来看12(3)?为整体,45组成分支。
总结
以上就是正则表达式中的操作符及其优先级,当我们碰到复杂表达式的时候,跟着优先级一步步去分析,就能知道正则所匹配的规则。