mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2024-04-21 12:32:22 +00:00
docs(regex): edit regex/y flag
This commit is contained in:
+15
-8
@@ -23,7 +23,7 @@ var regex = /xyz/i;
|
||||
但是,ES5不允许此时使用第二个参数,添加修饰符,否则会报错。
|
||||
|
||||
```javascript
|
||||
var regex = new RegExp(/xyz/, i);
|
||||
var regex = new RegExp(/xyz/, 'i');
|
||||
// Uncaught TypeError: Cannot supply flags when constructing one RegExp from another
|
||||
```
|
||||
|
||||
@@ -146,7 +146,7 @@ codePointLength(s) // 2
|
||||
|
||||
除了`u`修饰符,ES6还为正则表达式添加了`y`修饰符,叫做“粘连”(sticky)修饰符。
|
||||
|
||||
y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。
|
||||
`y`修饰符的作用与`g`修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,`g`修饰符只要剩余位置中存在匹配就可,而`y`修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。
|
||||
|
||||
```javascript
|
||||
var s = 'aaa_aa_a';
|
||||
@@ -224,9 +224,9 @@ REGEX.lastIndex // 4
|
||||
// null
|
||||
```
|
||||
|
||||
上面代码由于不能保证头部匹配,所以返回null。y修饰符的设计本意,就是让头部匹配的标志ˆ在全局匹配中都有效。
|
||||
上面代码由于不能保证头部匹配,所以返回`null`。`y`修饰符的设计本意,就是让头部匹配的标志ˆ在全局匹配中都有效。
|
||||
|
||||
在split方法中使用y修饰符,原字符串必须以分隔符开头。这也意味着,只要匹配成功,数组的第一个成员肯定是空字符串。
|
||||
在`split`方法中使用y修饰符,原字符串必须以分隔符开头。这也意味着,只要匹配成功,数组的第一个成员肯定是空字符串。
|
||||
|
||||
```javascript
|
||||
// 没有找到匹配
|
||||
@@ -248,14 +248,21 @@ REGEX.lastIndex // 4
|
||||
// [ '', '', '' ]
|
||||
```
|
||||
|
||||
下面是字符串对象的replace方法的例子。
|
||||
下面是字符串对象的`replace`方法的例子。
|
||||
|
||||
```javascript
|
||||
const REGEX = /a/gy;
|
||||
'aaxa'.replace(REGEX, '-') // '--xa'
|
||||
```
|
||||
|
||||
上面代码中,最后一个a因为不是出现下一次匹配的头部,所以不会被替换。
|
||||
上面代码中,最后一个`a`因为不是出现下一次匹配的头部,所以不会被替换。
|
||||
|
||||
单单一个`y`修饰符对`match`方法,只能返回第一个匹配,必须与`g`修饰符联用,才能返回所有匹配。
|
||||
|
||||
```javascript
|
||||
'a1a2a3'.match(/a\d/y) // ["a1"]
|
||||
'a1a2a3'.match(/a\d/gy) // ["a1", "a2", "a3"]
|
||||
```
|
||||
|
||||
`y`修饰符的一个应用,是从字符串提取token(词元),`y`修饰符确保了匹配之间不会有漏掉的字符。
|
||||
|
||||
@@ -278,7 +285,7 @@ function tokenize(TOKEN_REGEX, str) {
|
||||
}
|
||||
```
|
||||
|
||||
上面代码中,如果字符串里面没有非法字符,y修饰符与g修饰符的提取结果是一样的。但是,一旦出现非法字符,两者的行为就不一样了。
|
||||
上面代码中,如果字符串里面没有非法字符,`y`修饰符与`g`修饰符的提取结果是一样的。但是,一旦出现非法字符,两者的行为就不一样了。
|
||||
|
||||
```javascript
|
||||
tokenize(TOKEN_Y, '3x + 4')
|
||||
@@ -287,7 +294,7 @@ tokenize(TOKEN_G, '3x + 4')
|
||||
// [ '3', '+', '4' ]
|
||||
```
|
||||
|
||||
上面代码中,g修饰符会忽略非法字符,而y修饰符不会,这样就很容易发现错误。
|
||||
上面代码中,`g`修饰符会忽略非法字符,而`y`修饰符不会,这样就很容易发现错误。
|
||||
|
||||
## sticky属性
|
||||
|
||||
|
||||
Reference in New Issue
Block a user