摘要:定義在中,定義一個(gè)正則表達(dá)式有兩種方式,一種是直接量,另一種是使用構(gòu)造函數(shù)。元字符在正則表達(dá)式的模式中,有一些字符是有特殊含義的,被稱為元字符,如果要匹配元字符,則必須對(duì)其進(jìn)行轉(zhuǎn)義。正則表達(dá)式詳解二
簡(jiǎn)介
先來一段介紹:
正則表達(dá)式,又稱正規(guī)表示法、常規(guī)表示法(英語:Regular Expression,在代碼中常簡(jiǎn)寫為regex、regexp或RE),計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式使用單個(gè)字符串來描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來檢索、替換那些符合某個(gè)模式的文本。
簡(jiǎn)單說就是:
它是對(duì)字符串執(zhí)行模式匹配的強(qiáng)大工具。
Javascript中的正則表達(dá)式相較于其他語言來說實(shí)現(xiàn)的并不完整,但仍然是十分強(qiáng)大的,能夠幫助我們完成絕大多數(shù)模式匹配任務(wù)。下面將一步一步詳細(xì)介紹。
定義在Javascript中,定義一個(gè)正則表達(dá)式有兩種方式,一種是直接量,另一種是使用構(gòu)造函數(shù)。
直接量Javascript可以使用類似Perl的語法定義一個(gè)正則表達(dá)式
var r = /pattern/flags;
其中pattern是任何簡(jiǎn)單或復(fù)雜的正則表達(dá)式,flags是用以表達(dá)正則表達(dá)式行為的一個(gè)或者多個(gè)標(biāo)識(shí)。
flagsg 表示全局(global)模式,即模式將被應(yīng)用于所有字符串
i 表示不區(qū)分大小寫
m 多行模式
來看幾個(gè)例子
var r1 = /at/g; // 匹配字符串中所有"at"的實(shí)例 var r2 = /.ho/gi; // 匹配以"ho"結(jié)尾的三個(gè)字符的組合,不區(qū)分大小寫使用構(gòu)造函數(shù)
Javascript中正則表達(dá)式的構(gòu)造函數(shù)為RegExp,即Regular Expression的縮寫,它接收兩個(gè)參數(shù),第一個(gè)為要匹配的字符串模式,另一個(gè)是可選的標(biāo)識(shí)位。
如:
var r = new RegExp("hello", "g"); // 匹配字符串中所有的"hello"實(shí)例
有一點(diǎn)一定要注意,第一個(gè)參數(shù)是一個(gè)字符串,而不是正則表達(dá)式的直接量。
元字符在正則表達(dá)式的模式中,有一些字符是有特殊含義的,被稱為元字符,如果要匹配元字符,則必須對(duì)其進(jìn)行轉(zhuǎn)義。
這些元字符分別是:
( [ { ^ $ | ) ? * + . ] }
例如:
// 如果要匹配"/user/name"這個(gè)字符串,正則表達(dá)式需要這樣 var r1 = //user/name/; var r2 = /.ho/; // 匹配".ho"這個(gè)字符串關(guān)于使用構(gòu)造函數(shù)定義
如果使用構(gòu)造函數(shù)定義正則表達(dá)式,由于構(gòu)造函數(shù)的第一個(gè)參數(shù)必須是一個(gè)字符串,在匹配元字符時(shí),這將會(huì)導(dǎo)致雙重轉(zhuǎn)義。
例如:
var r1 = new RegExp("/user", "g"); // wrong // 由于在字符串中需要轉(zhuǎn)義為,所以,如果要匹配/user,正則表達(dá)式需要寫為 var r1 = new RegExp("/user", "g");
所有元字符都需要進(jìn)行雙重轉(zhuǎn)義
另外,還有一些預(yù)定義的特殊字符也被稱為元字符
元字符 | 描述 |
---|---|
. | 查找單個(gè)字符,除了換行和行結(jié)束符。 |
w | 查找單詞字符。 |
W | 查找非單詞字符。 |
d | 查找數(shù)字。 |
D | 查找非數(shù)字字符。 |
s | 查找空白字符。 |
S | 查找非空白字符。 |
匹配單詞邊界。 | |
B | 匹配非單詞邊界。 |