正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、replace、search 和 split 方法。
本章介绍 JavaScript正则表达式。
#### 创建一个正则表达式
你可以使用以下两种方法之一构建一个正则表达式:
使用一个正则表达式字面量,其由包含在斜杠之间的模式组成,如下所示:
~~~
/*
/pattern/flags
*/
const regex = /ab+c/;
const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;
~~~
在加载脚本后,正则表达式字面值提供正则表达式的编译。当正则表达式保持不变时,使用此方法可获得更好的性能。
或者调用RegExp对象的构造函数,如下所示:
~~~
/*
new RegExp(pattern [, flags])
*/
let regex = new RegExp("ab+c");
let regex = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$/, "gi");
let regex = new RegExp("^[a-zA-Z]+[0-9]*\W?_$", "gi");
~~~
使用构造函数提供正则表达式的运行时编译。使用构造函数,当你知道正则表达式模式将会改变,或者你不知道模式,并从另一个来源,如用户输入。
编写一个正则表达式的模式
一个正则表达式模式是由简单的字符所构成的,比如`/abc/`, 或者是简单和特殊字符的组合,比如` /ab*c/` 或` /Chapter (\d+)\.\d*/`。后者用到了括号,它在正则表达式中可以被用作是一个记忆设备。这一部分正则所匹配的字符将会被记住,在后面可以被利用。正如使用括号的子字符串匹配
JS中每个RegExp对象实例有两个方法,分别是:exec()与test()。这两个方法运行逻辑几乎等价,但是exec要复杂些,匹配失败返回null,匹配成功它将返回一个数组, 数组第一个元素是匹配整个正则的内容,之后的元素是正则中捕获组的匹配(注:使用非捕获组可以获得微弱的性能优势)举个栗子:
~~~
//捕获组()
var pattern1 = /(www)\.(baidu)\.(com)/i
//非捕获组(?:)
var pattern2 = /(?:www)\.(?:baidu)\.(?:com)/i
var str = 'www.baidu.com'
pattern1.exec(str)
//返回数组["www.baidu.com", "www", "baidu", "com"]
pattern2.exec(str)
//返回数组["www.baidu.com"]
~~~