正则 分组
This commit is contained in:
parent
51e7114a22
commit
9b424b14df
@ -102,6 +102,7 @@ let reg2 = /[0-9]/g
|
|||||||
|
|
||||||
### 量词
|
### 量词
|
||||||
用于指定某个组合出现的数量
|
用于指定某个组合出现的数量
|
||||||
|
|
||||||
|字符|含义|
|
|字符|含义|
|
||||||
|---|---|
|
|---|---|
|
||||||
|?|0次或1次|
|
|?|0次或1次|
|
||||||
@ -173,5 +174,39 @@ let reg = /\d{2}(?=[a-zA-Z]{2})/
|
|||||||
|零宽负向后顾|exp(?<!assert)|我后面是不符合assert的|
|
|零宽负向后顾|exp(?<!assert)|我后面是不符合assert的|
|
||||||
|
|
||||||
|
|
||||||
如同^代表开头,$代表结尾,\b代表单词边界一样,前瞻断言和后顾断言也有类似的作用,它们只匹配某些位置
|
如同^代表开头,$代表结尾,\b代表单词边界一样,前瞻断言和后顾断言也有类似的特点,它们只匹配某些位置
|
||||||
在匹配过程中,不占用字符,所以被称为`零宽`
|
在匹配过程中,不占用字符,所以被称为`零宽`
|
||||||
|
|
||||||
|
### 分组
|
||||||
|
当我们需要把某个部分看做一个整体添加量词的时候, 就要给这个部分添加`()`
|
||||||
|
也就是作为一个分组
|
||||||
|
(也包括上面的分支条件的边界位置)
|
||||||
|
|
||||||
|
未添加分组
|
||||||
|

|
||||||
|
|
||||||
|
添加分组
|
||||||
|

|
||||||
|
|
||||||
|
添加分组之后, 分组后面跟着的量词就会作用于整体
|
||||||
|
|
||||||
|
#### 分组的引用
|
||||||
|
正则在解析的过程中会对分组进行编号(从1开始)
|
||||||
|
我们可以通过`\数字`的方式对分组进行引用, 从而实现一些需求
|
||||||
|
|
||||||
|
例如
|
||||||
|
要匹配两个连续的数字, 并且这两个数字不同
|
||||||
|
> 要让后一个数字和前一个数字不同
|
||||||
|
就必须要引用前一个数字, 那么只能对分组进行引用
|
||||||
|
同时配合零宽负向前瞻
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
let reg = /(\d{1})(?!\1)\d{1}/
|
||||||
|
reg.test('a32') // true
|
||||||
|
reg.test('a55') // false
|
||||||
|
```
|
||||||
|
+ `(\d{1})`这里代表的是匹配一个数字, 这个简单
|
||||||
|
+ `(?!\1)`这里代表的是后面的字符与第一分组不同(但是不占用字符)
|
||||||
|
+ `\d{1}`这里代表后面还是一个数字
|
||||||
|
|
||||||
|
所以就可以达到匹配两个连续数字, 并且这两个数字不同了
|
||||||
|
|||||||
BIN
source/images/JavaScript/regex/未添加分组.png
Normal file
BIN
source/images/JavaScript/regex/未添加分组.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
BIN
source/images/JavaScript/regex/添加分组.png
Normal file
BIN
source/images/JavaScript/regex/添加分组.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
Loading…
x
Reference in New Issue
Block a user