From d2fca7f2a17c261a884764d661b69d8bac4bc80b Mon Sep 17 00:00:00 2001 From: ruanyf Date: Wed, 23 Mar 2016 13:31:04 +0800 Subject: [PATCH] =?UTF-8?q?docs(regex):=20RegExp=E6=9E=84=E9=80=A0?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/regex.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/regex.md b/docs/regex.md index 6644e83..d71c444 100644 --- a/docs/regex.md +++ b/docs/regex.md @@ -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对象上。