1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00

docs(regex): RegExp构造函数

This commit is contained in:
ruanyf 2016-03-23 13:31:04 +08:00
parent e0e471bdd4
commit d2fca7f2a1

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对象上。