正則表達式是用于匹配字符串中字符組合的模式。在 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"]
~~~