ECMAScript通過RegExp類型來支持正則表達式。使用下面類似Perl的語法,就可以創(chuàng)建一個正則表達式:
var expression=/pattern/flags;
其中的模式(pattern)部分可以是任何簡單或復雜的正則表達式,可以包含字符類、限定符、分組,向前查找,以及反向引用。每個正則表達式都可帶有一或多個標志( flags),用以標明正則表達 式的行為。正則表達式的匹配模式支持下列3個標志:
◎g——表示全局(global)模式,即模式將被應用于所有字符串,而非在發(fā)現(xiàn)第一個匹配項時立即停止;
◎i——表示不區(qū)分大小寫( case-insensitive)模式,即在確定匹配項時忽略模式與字符串的大小寫;
◎m——表示多行( multiline)模式,即在到達一行文本末尾時還會繼續(xù)查找下一行中是否存在與模式匹配的項。
因此,一個正則表達式就是一個模式與上述3個標志的組合體。不同組合產(chǎn)生不結(jié)果,如下面的例子所示:
/*
*匹配字符串中所有"at"的實例
*/
var patternl=/at/g;
/*
*匹配第一個”bat”或”cat",不區(qū)分大小寫
*/
var pattern2=/[bcl at/i;
/*
*匹配所有以”at”結(jié)尾的3個字符的組合,不區(qū)分大小寫
*/
var pattern3=/.at/gi;
與其他語言中的正則表達式類似,模式中使用的所有元字符都必須轉(zhuǎn)義。正則表達式中的元字符包括:
( [ { ^ $ | ) ? * + .]}
這些元字符在正則表達式中都有一或多種特殊用途,因此如果想要匹配字符串中包含的這些字符.就必須對它們進行轉(zhuǎn)義。下面給出幾個例子:
/*
*匹配第一個" bat”或"cat",不區(qū)分大小寫
*/
var patternl=/[bc] at/i;
*匹配第一個”[bc]at",不區(qū)分大小寫
*/
var pattern2=/\[bc] at/i;
*匹配所有以"at”結(jié)尾的3個字符的組合,不區(qū)分大小寫
*/
var pattern3=/.at/gi;
*匹配所有”.at”,不區(qū)分大小寫
*/
var pattern4=/\.at/gi;
在上面的例子中,patternl匹配第一個”bat”或”cat”,不區(qū)分大小寫。而要想直接匹配"[bc]at"的話,就需要像定義pattern2 -樣,對其中的兩個方括號進行轉(zhuǎn)義。對于pattern3來說,句點表 示位于”at”之前的任意一個可以構(gòu)成匹配項的字符。但如果想匹配”.at”,則必須對句點本身進行轉(zhuǎn)義,如pattern4所示。
前面舉的這些例子都是以字面量形式來定義的正則表達式。另一種創(chuàng)建正則表達式的方式是使用RegExp構(gòu)造函數(shù),它接受兩個參數(shù):一個是要匹配的字符串模式,另一個是可選的標志字符串??梢允褂米置媪慷x的任何表達式,都可以使用構(gòu)造函數(shù)來定義,如下面的例子所示:
/*
*匹配第一個“bat n或”cat”,不區(qū)分大小寫
*/
var patternl=/[bc]at/i;
/*
*與patternl相同,只不過是使用構(gòu)造函數(shù)創(chuàng)建的
*/
var pattern2=new RegExp(”[bc] at".”i");
在此,南昌網(wǎng)站建設公司前端開發(fā)工程師提醒,patternl和pattern2是兩個完全等價的正則表達式。要注意的是,傳遞給RegExp構(gòu)造函數(shù)的兩個參數(shù)都是字符串(不能把正則表達式字面量傳遞給RegExp構(gòu)造函數(shù))。由于RegExp構(gòu)造函數(shù)的模式參數(shù)是字符串,所以在某些情況下要對字符進行雙重轉(zhuǎn)義。所有元字符都必須雙重轉(zhuǎn)義,那些已經(jīng)轉(zhuǎn)義過的字符也是如此,例如\n(字符\在字符串中通常被轉(zhuǎn)義為\\,而在正則表達式字符串中就會變成\\)。下表給出了一些模式,左邊是這些模式的字面量形式,右邊是使用RegExp構(gòu)造函數(shù)定義相同模式時使用的字符串。
字面量模式 等價的字符串
/{bc}at/ "\[bc\]at"
/.at/ "\\.at"
/name/age/ "name /age"
/\d.d{1,3}/ ”\\d.\\d(1,2)”
/\w\hello\\123/ ”\W\\hello\\123”
希望本文對廣大站長或從事企業(yè)網(wǎng)站建設公司的團隊有所幫助,如對此不太理解的,可以與南昌網(wǎng)絡公司百恒網(wǎng)絡技術(shù)部聯(lián)系。我們很高興與廣大站長和從事企業(yè)網(wǎng)站建設公司技術(shù)人員分享我們的技術(shù)和經(jīng)驗。