摘要:定義在中,定義一個正則表達式有兩種方式,一種是直接量,另一種是使用構造函數。元字符在正則表達式的模式中,有一些字符是有特殊含義的,被稱為元字符,如果要匹配元字符,則必須對其進行轉義。正則表達式詳解二
簡介
先來一段介紹:
正則表達式,又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。
簡單說就是:
它是對字符串執行模式匹配的強大工具。
Javascript中的正則表達式相較于其他語言來說實現的并不完整,但仍然是十分強大的,能夠幫助我們完成絕大多數模式匹配任務。下面將一步一步詳細介紹。
定義在Javascript中,定義一個正則表達式有兩種方式,一種是直接量,另一種是使用構造函數。
直接量Javascript可以使用類似Perl的語法定義一個正則表達式
var r = /pattern/flags;
其中pattern是任何簡單或復雜的正則表達式,flags是用以表達正則表達式行為的一個或者多個標識。
flagsg 表示全局(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 | 匹配非單詞邊界。 |