正则 分组

This commit is contained in:
结发受长生 2018-12-23 23:40:31 +08:00
parent 51e7114a22
commit 9b424b14df
3 changed files with 37 additions and 2 deletions

View File

@ -102,6 +102,7 @@ let reg2 = /[0-9]/g
### 量词
用于指定某个组合出现的数量
|字符|含义|
|---|---|
|?|0次或1次|
@ -173,5 +174,39 @@ let reg = /\d{2}(?=[a-zA-Z]{2})/
|零宽负向后顾|exp(?<!assert)|我后面是不符合assert的|
如同^代表开头,$代表结尾,\b代表单词边界一样前瞻断言和后顾断言也有类似的作用它们只匹配某些位置
在匹配过程中,不占用字符,所以被称为`零宽`
如同^代表开头,$代表结尾,\b代表单词边界一样前瞻断言和后顾断言也有类似的特点它们只匹配某些位置
在匹配过程中,不占用字符,所以被称为`零宽`
### 分组
当我们需要把某个部分看做一个整体添加量词的时候, 就要给这个部分添加`()`
也就是作为一个分组
(也包括上面的分支条件的边界位置)
未添加分组
![未添加分组](/images/JavaScript/regex/未添加分组.png)
添加分组
![添加分组](/images/JavaScript/regex/添加分组.png)
添加分组之后, 分组后面跟着的量词就会作用于整体
#### 分组的引用
正则在解析的过程中会对分组进行编号(从1开始)
我们可以通过`\数字`的方式对分组进行引用, 从而实现一些需求
例如
要匹配两个连续的数字, 并且这两个数字不同
> 要让后一个数字和前一个数字不同
就必须要引用前一个数字, 那么只能对分组进行引用
同时配合零宽负向前瞻
```javascript
let reg = /(\d{1})(?!\1)\d{1}/
reg.test('a32') // true
reg.test('a55') // false
```
+ `(\d{1})`这里代表的是匹配一个数字, 这个简单
+ `(?!\1)`这里代表的是后面的字符与第一分组不同(但是不占用字符)
+ `\d{1}`这里代表后面还是一个数字
所以就可以达到匹配两个连续数字, 并且这两个数字不同了

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB