docs(regex): RegExp构造函数

This commit is contained in:
ruanyf
2016-03-23 13:31:04 +08:00
parent e0e471bdd4
commit d2fca7f2a1
+17 -4
View File
@@ -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对象上。