Javascript正規表示式詳解(一)

chshouyu發表於2014-05-22

簡介

先來一段介紹:

正規表示式,又稱正規表示法、常規表示法(英語: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 匹配非單詞邊界。

相關文章