簡介
先來一段介紹:
正規表示式,又稱正規表示法、常規表示法(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),電腦科學的一個概念。正規表示式使用單個字串來描述、匹配一系列符合某個句法規則的字串。在很多文字編輯器裡,正規表示式通常被用來檢索、替換那些符合某個模式的文字。
簡單說就是:
它是對字串執行模式匹配的強大工具。
Javascript中的正規表示式相較於其他語言來說實現的並不完整,但仍然是十分強大的,能夠幫助我們完成絕大多數模式匹配任務。下面將一步一步詳細介紹。
定義
在Javascript中,定義一個正規表示式有兩種方式,一種是直接量,另一種是使用建構函式。
直接量
Javascript可以使用類似Perl的語法定義一個正規表示式
var r = /pattern/flags;
其中pattern
是任何簡單或複雜的正規表示式,flags是用以表達正規表示式行為的一個或者多個標識。
flags
- g 表示全域性(global)模式,即模式將被應用於所有字串
- i 表示不區分大小寫
- m 多行模式
來看幾個例子
var r1 = /at/g; // 匹配字串中所有`at`的例項
var r2 = /.ho/gi; // 匹配以`ho`結尾的三個字元的組合,不區分大小寫
使用建構函式
Javascript中正規表示式的建構函式為RegExp,即Regular Expression
的縮寫,它接收兩個引數,第一個為要匹配的字串模式,另一個是可選的標識位。
如:
var r = new RegExp(`hello`, `g`); // 匹配字串中所有的`hello`例項
有一點一定要注意,第一個引數是一個字串,而不是正規表示式的直接量。
元字元
在正規表示式的模式中,有一些字元是有特殊含義的,被稱為元字元
,如果要匹配元字元,則必須對其進行轉義。
這些元字元分別是:
( [ { ^ $ | ) ? * + . ] }
例如:
// 如果要匹配`/user/name`這個字串,正規表示式需要這樣
var r1 = //user/name/;
var r2 = /.ho/; // 匹配`.ho`這個字串
關於使用建構函式定義
如果使用建構函式定義正規表示式,由於建構函式的第一個引數必須是一個字串,在匹配元字元時,這將會導致雙重轉義。
例如:
var r1 = new RegExp(`/user`, `g`); // wrong
// 由於在字串中需要轉義為\,所以,如果要匹配/user,正規表示式需要寫為
var r1 = new RegExp(`\/user`, `g`);
所有元字元都需要進行雙重轉義
另外,還有一些預定義的特殊字元也被稱為元字元
元字元 | 描述 |
---|---|
. | 查詢單個字元,除了換行和行結束符。 |
w | 查詢單詞字元。 |
W | 查詢非單詞字元。 |
d | 查詢數字。 |
D | 查詢非數字字元。 |
s | 查詢空白字元。 |
S | 查詢非空白字元。 |
匹配單詞邊界。 | |
B | 匹配非單詞邊界。 |