@@ -478,7 +478,7 @@ const regexArrows = /^\p{Block=Arrows}+$/u;
478
478
regexArrows .test (' ←↑→↓↔↕↖↗↘↙⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇧⇩' ) // true
479
479
```
480
480
481
- ## v 修饰符, Unicode 属性类的运算
481
+ ## v 修饰符: Unicode 属性类的运算
482
482
483
483
有时,需要向某个 Unicode 属性类添加或减少字符,即需要对属性类进行运算。现在有一个[ 提案] ( https://github.com/tc39/proposal-regexp-v-flag ) ,增加了 Unicode 属性类的运算功能。
484
484
@@ -629,11 +629,11 @@ RE_TWICE.test('abc!abc!abc') // true
629
629
RE_TWICE .test (' abc!abc!ab' ) // false
630
630
```
631
631
632
- ## 正则匹配索引
632
+ ## d 修饰符: 正则匹配索引
633
633
634
- 正则匹配的结果 ,在原始字符串里面的开始位置和结束位置,目前获取并不是很方便。正则实例的` exec() ` 方法的返回结果,现有一个 ` index ` 属性,可以获取整个匹配结果的开始位置。但是,组匹配的每个组的开始位置,很难拿到。
634
+ 组匹配的结果 ,在原始字符串里面的开始位置和结束位置,目前获取并不是很方便。正则实例的` exec() ` 方法有一个 ` index ` 属性,可以获取整个匹配结果的开始位置。但是,组匹配的每个组的开始位置,很难拿到。
635
635
636
- [ ES2022] ( https://github.com/tc39/proposal-regexp-match-Indices ) 中新增 ` d ` 修饰符,使用 ` /d ` 修饰符,为 ` exec() ` 、` match() ` 等方法的返回结果加上 ` indices ` 属性,在这个属性上面可以拿到匹配的开始位置和结束位置 。
636
+ [ ES2022] ( https://github.com/tc39/proposal-regexp-match-Indices ) 新增了 ` d ` 修饰符,这个修饰符可以让 ` exec() ` 、` match() ` 的返回结果添加 ` indices ` 属性,在该属性上面可以拿到匹配的开始位置和结束位置 。
637
637
638
638
``` javascript
639
639
const text = ' zabbcdef' ;
@@ -644,7 +644,7 @@ result.index // 1
644
644
result .indices // [ [1, 3] ]
645
645
```
646
646
647
- 上面例子中 ,` exec() ` 方法的返回结果` result ` ,它的` index ` 属性是整个匹配结果(` ab ` )的开始位置,现在新增了一个 ` indices ` 属性。它是一个数组,每个成员还是一个数组 ,包含了匹配结果在原始字符串的开始位置和结束位置。由于上例的正则表达式没有组匹配 ,所以` indices ` 数组只有一个成员,表示整个匹配的开始位置是` 1 ` ,结束位置是` 3 ` 。
647
+ 上面示例中 ,` exec() ` 方法的返回结果` result ` ,它的` index ` 属性是整个匹配结果(` ab ` )的开始位置。由于正则表达式 ` re ` 有 ` d ` 修饰符, ` result ` 现在就会多出一个 ` indices ` 属性。该属性是一个数组,它的每个成员还是一个数组 ,包含了匹配结果在原始字符串的开始位置和结束位置。由于上例的正则表达式 ` re ` 没有包含组匹配 ,所以` indices ` 数组只有一个成员,表示整个匹配的开始位置是` 1 ` ,结束位置是` 3 ` 。
648
648
649
649
注意,开始位置包含在匹配结果之中,相当于匹配结果的第一个字符的位置。但是,结束位置不包含在匹配结果之中,是匹配结果的下一个字符。比如,上例匹配结果的最后一个字符` b ` 的位置,是原始字符串的2号位,那么结束位置` 3 ` 就是下一个字符的位置。
650
650
@@ -658,7 +658,7 @@ const result = re.exec(text);
658
658
result .indices // [ [ 1, 6 ], [ 4, 6 ] ]
659
659
```
660
660
661
- 上面例子中,正则表达式包含一个组匹配 ` (cd) ` ,那么` indices ` 属性数组就有两个成员,第一个成员是整个匹配结果(` abbcd ` )的开始位置和结束位置,第二个成员是组匹配(` cd ` )的开始位置和结束位置。
661
+ 上面例子中,正则表达式 ` re ` 包含一个组匹配 ` (cd) ` ,那么` indices ` 属性数组就有两个成员,第一个成员是整个匹配结果(` abbcd ` )的开始位置和结束位置,第二个成员是组匹配(` cd ` )的开始位置和结束位置。
662
662
663
663
下面是多个组匹配的例子。
664
664
@@ -670,7 +670,7 @@ const result = re.exec(text);
670
670
result .indices // [ [1, 8], [4, 8], [6, 8] ]
671
671
```
672
672
673
- 上面例子中,正则表达式包含两个组匹配 ,所以` indices ` 属性数组就有三个成员。
673
+ 上面例子中,正则表达式 ` re ` 包含两个组匹配 ,所以` indices ` 属性数组就有三个成员。
674
674
675
675
如果正则表达式包含具名组匹配,` indices ` 属性数组还会有一个` groups ` 属性。该属性是一个对象,可以从该对象获取具名组匹配的开始位置和结束位置。
676
676
@@ -695,7 +695,7 @@ result.indices[1] // undefined
695
695
result .indices .groups [' Z' ] // undefined
696
696
```
697
697
698
- 上面例子中,由于组匹配不成功 ,所以` indices ` 属性数组和` indices.groups ` 属性对象对应的组匹配成员都是 ` undefined ` 。
698
+ 上面例子中,由于组匹配 ` ce ` 不成功 ,所以` indices ` 属性数组和` indices.groups ` 属性对象对应的组匹配成员 ` Z ` 都是 ` undefined ` 。
699
699
700
700
## String.prototype.matchAll()
701
701
0 commit comments