mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 10:22:23 +00:00
docs(regex): RegExp构造函数
This commit is contained in:
parent
e0e471bdd4
commit
d2fca7f2a1
@ -2,7 +2,9 @@
|
||||
|
||||
## RegExp构造函数
|
||||
|
||||
在ES5中,RegExp构造函数只能接受字符串作为参数。
|
||||
在ES5中,RegExp构造函数的参数有两种情况。
|
||||
|
||||
第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag)。
|
||||
|
||||
```javascript
|
||||
var regex = new RegExp('xyz', 'i');
|
||||
@ -10,22 +12,33 @@ var regex = new RegExp('xyz', 'i');
|
||||
var regex = /xyz/i;
|
||||
```
|
||||
|
||||
ES6允许RegExp构造函数接受正则表达式作为参数,这时会返回一个原有正则表达式的拷贝。
|
||||
第二种情况是,参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝。
|
||||
|
||||
```javascript
|
||||
var regex = new RegExp(/xyz/i);
|
||||
// 等价于
|
||||
var regex = /xyz/i;
|
||||
```
|
||||
|
||||
如果使用RegExp构造函数的第二个参数指定修饰符,则返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
|
||||
但是,ES5不允许此时使用第二个参数,添加修饰符,否则会报错。
|
||||
|
||||
```javascript
|
||||
var regex = new RegExp(/xyz/, i);
|
||||
// Uncaught TypeError: Cannot supply flags when constructing one RegExp from another
|
||||
```
|
||||
|
||||
ES6改变了这种行为。如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
|
||||
|
||||
```javascript
|
||||
new RegExp(/abc/ig, 'i').flags
|
||||
// "i"
|
||||
```
|
||||
|
||||
上面代码中,原有正则对象的修饰符是`ig`,它会被第二个参数`i`覆盖。
|
||||
|
||||
## 字符串的正则方法
|
||||
|
||||
字符串对象共有4个方法,可以使用正则表达式:match()、replace()、search()和split()。
|
||||
字符串对象共有4个方法,可以使用正则表达式:`match()`、`replace()`、`search()`和`split()`。
|
||||
|
||||
ES6将这4个方法,在语言内部全部调用RegExp的实例方法,从而做到所有与正则相关的方法,全都定义在RegExp对象上。
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user