RegExp類型

創(chuàng)建正則表達(dá)式

字面量形式

var expression = / pattern / flags;

其中匹表,模式(pattern)部分可以是任何簡(jiǎn)單或復(fù)雜的正則表達(dá)式门坷,可以包含字符類、限定符袍镀、分組默蚌、向前查找以及反向引用。每個(gè)正則表達(dá)式都可帶有一或多個(gè)標(biāo)志(flags)苇羡,用來標(biāo)明正則表達(dá)式行為绸吸。
pattern支持下列3個(gè)標(biāo)志:

  1. g:表示全局(global)模式,即模式將被應(yīng)用于所有字符串,而非發(fā)現(xiàn)第一個(gè)匹配項(xiàng)時(shí)立即停止锦茁;
  2. i:表示不區(qū)分大小寫(case-insensitive)模式攘轩,即在確定匹配項(xiàng)時(shí)忽略模式與字符串的大小寫;
  3. m:表示多行(multiline)模式码俩,即在到達(dá)一行文本末尾時(shí)還會(huì)繼續(xù)查找下一行中是否存在與模式匹配的項(xiàng)度帮。

例:

/*
 * 匹配字符串中所有“at”實(shí)例
 */
 var pattern1 = /at/g;
 
/*
 * 匹配第一個(gè)“bat”或者“cat”不區(qū)分大小寫
 */
 var pattern2=/[bc]at/i;

/*
 *匹配所有以“at”結(jié)尾的3個(gè)字符的組合,不區(qū)分大小寫
 */
 var pattern3=/.at/gi;

模式中使用的所有元字符都必須轉(zhuǎn)義稿存。正則表達(dá)式中的元字符有14個(gè)笨篷,包括:
() [] {} \ ^ $ | ? * + .
如果要匹配這些字符,就需要對(duì)他們進(jìn)行轉(zhuǎn)義挠铲,轉(zhuǎn)義用""來進(jìn)行冕屯。

/*
 * 匹配第一個(gè)“bat”或者“cat”不區(qū)分大小寫
 */
 var pattern1=/[bc]at/i;
 
 /*
  * 匹配第一個(gè)“[bc]at”,不區(qū)分大小寫
  */
  var pattern2=/\[bc\]at/i;
 
 /*
  * 匹配所有以“at”結(jié)尾的3個(gè)字符的組合,不區(qū)分大小寫
  */
  var pattern3=/.at/gi;
 
 /*
  * 匹配所有“.at”拂苹,不區(qū)分大小寫
  */
  var pattern4=/\.at/gi;

量詞

量詞 說明
{n} 匹配n次
{n,m} 匹配至少n次安聘,最多m次
{n,} 匹配至少n次
? 相當(dāng)于{0,1}
* 相當(dāng)于{0,}
+ 相當(dāng)于{1,}

位置符號(hào)

符號(hào) 說明
^ 起始符號(hào)
$ 結(jié)束符號(hào)
?= 肯定正向環(huán)視
?! 否定正向環(huán)視

控制符號(hào)

符號(hào) 說明
[] 候選
|
^
-

例如:
(red|blue|green) 查找任何指定的選項(xiàng)
[abc] 查找方括號(hào)之間的任何字符
[^abc] 查找任何不在方括號(hào)之間的字符
[0-9] 查找任何從0到9的數(shù)字
[a-z] 查找任何從小寫a到小寫z的字符
[A-Z] 查找任何從大寫A到大寫Z的字符
[A-z] 查找任何從大寫A到小寫z的字符
[adgk] 查找給定集合內(nèi)的任何字符
[^adgk] 查找給定集合外的任何字符

$符號(hào)

說明
$& 匹配整個(gè)模式的子字符串(與RegExp.lastMatch的值相同)
$` 匹配子字符串之前的子字符串(與RegExp.leftContext的值相同)
$' 匹配子字符串之后的子字符串(與RegExp.rightContext的值相同)
$n 匹配第n個(gè)捕獲組的子字符串,其中n等于0-9瓢棒。$1表示匹配第一個(gè)捕獲組的子字符串(從第1個(gè)算起)
$nn 匹配第nn個(gè)捕獲組的子字符串浴韭,其中nn等于01-99

RegExp構(gòu)造函數(shù)形式

RegExp構(gòu)造函數(shù)接收兩個(gè)參數(shù):param1-要匹配的字符串模式,param2-可選的標(biāo)志字符串

/*
 * 匹配第一個(gè)“bat”或者“cat”不區(qū)分大小寫
 */
 var pattern1=/[bc]at/i;

/*
 * 與pattern1相同脯宿,只不過是用構(gòu)造函數(shù)創(chuàng)建的
 */
 var pattern2=new RegExp("[bc]at","i");

注意:RegExp構(gòu)造函數(shù)的模式參數(shù)是字符串念颈,所以某些情況下要對(duì)字符串進(jìn)行雙重轉(zhuǎn)義。所有元字符都必須雙重轉(zhuǎn)義连霉,已經(jīng)轉(zhuǎn)義過的字符也一樣榴芳,如\n,\在字符串中被轉(zhuǎn)義為\\跺撼,因此在正則表達(dá)式字符串中會(huì)變成\\\\

RegExp實(shí)例屬性

RegExp的每個(gè)實(shí)例都具有下列屬性窟感,通過這些屬性可以取得有關(guān)模式的各種信息。

  • global:布爾值歉井,表示是否設(shè)置了g標(biāo)志
  • ignoreCase:布爾值柿祈,表示是否設(shè)置了i標(biāo)志
  • lastIndex:整數(shù),表示開始搜索下一個(gè)匹配項(xiàng)的字符位置哩至,從0算起
  • multiline:布爾值躏嚎,表示是否設(shè)置了標(biāo)志m
  • source:正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)中的字符串模式返回

通過實(shí)例屬性可以獲知一個(gè)正則表達(dá)式的各方面信息菩貌,但卻沒多大用處卢佣,因?yàn)檫@些信息都包含在模式聲明中。

var pattern1 = /\[bc\]at/i;

console.log(pattern1.global);//false
console.log(pattern1.ignoreCase);//true  
console.log(pattern1.multiline);//false
console.log(pattern1.lastIndex);//0
console.log(pattern1.source);//'\[bc\]at'

var pattern2 = new RegExp('\\[bc\\]at','i');

console.log(pattern2.global);//false
console.log(pattern2.ignoreCase);//true  
console.log(pattern2.multiline);//false
console.log(pattern2.lastIndex);//0
console.log(pattern2.source);//'\[bc\]at'

RegExp實(shí)例方法:exec()

專門為捕獲組而設(shè)計(jì)箭阶。
param:接受一個(gè)參數(shù)珠漂,即要應(yīng)用模式的字符串晚缩;
return:返回包含第一個(gè)匹配項(xiàng)信息的數(shù)組;沒有匹配項(xiàng)的情況下返回null媳危。

index 表示匹配項(xiàng)在字符串的位置
input 表示應(yīng)用正則表達(dá)式的字符串。

返回的數(shù)組包含兩個(gè)額外的屬性:index和input冈敛。

index 表示匹配項(xiàng)在字符串的位置
input 表示應(yīng)用正則表達(dá)式的字符串待笑。

在數(shù)組中,第一項(xiàng)是與整個(gè)模式匹配的字符串抓谴,其他項(xiàng)是與模式中的捕獲組匹配的字符串暮蹂,如果模式中沒有捕獲組,則該數(shù)組只包含一項(xiàng)癌压。

var text = 'mom and dad and baby and others';
var pattern = /mom( and dad( and baby)?)?/gi;
 
var matches = pattern.exec(text);
console.log(matches.index);    //0
console.log(matches.input);    //'mom and dad and baby'
console.log(matches[0]);       //'mom and dad and baby'
console.log(matches[1]);       //'and dad and baby'
console.log(matches[2]);       //'and baby'

上面的例子包含兩個(gè)捕獲組仰泻。最內(nèi)部的捕獲組匹配“and baby”,而包含它的捕獲組匹配“and dad”或者“and dad and baby”滩届。當(dāng)把字符串傳入exec()方法中之后集侯,發(fā)現(xiàn)了一個(gè)匹配項(xiàng)。因?yàn)檎麄€(gè)字符串本身與模式匹配帜消,所以返回的數(shù)組matches的index屬性值為0棠枉。數(shù)組中的第一項(xiàng)是匹配的整個(gè)字符串,第二項(xiàng)包含與第一個(gè)捕獲組匹配的內(nèi)容泡挺,第三項(xiàng)包含與第二個(gè)捕獲組匹配的內(nèi)容辈讶。
對(duì)于exec()方法,即使在模式中設(shè)置了全局標(biāo)志(g)娄猫,它每次也只會(huì)返回一個(gè)匹配項(xiàng)贱除。在不設(shè)置全局標(biāo)志的情況下,在同一個(gè)字符串上多次調(diào)用exec()將始終返回第一個(gè)匹配項(xiàng)的信息媳溺。而在設(shè)置全局標(biāo)志的情況下月幌,每次調(diào)用exec()則都會(huì)在字符串中繼續(xù)查找新匹配項(xiàng),如下例子所示:

var text = "cat,bat,sat,fat";
var pattern1 = /.at/;

var matches = pattern1.exec(text);
matches.index;       //0
matches[0];          //cat
pattern1.lastIndex;  //0

matches = pattern1.exec(text);
matches.index;       //0
matches[0];          //cat
pattern1.lastIndex;  //0

var pattern2 = /.at/g;

var matches = pattern2.exec(text);
matches.index;       //0
matches[0];          //cat
pattern2.lastIndex;  //3

matches = pattern2.exec(text);
matches.index;       //5
matches[0];          //bat
pattern2.lastIndex;  //8

上面例子中pattern1不是全局模式褂删,因此每次調(diào)用exec()返回的都是第一個(gè)匹配項(xiàng)("cat")飞醉。而pattern2是全局模式,因此每次調(diào)用exec()都會(huì)返回字符串中的下一個(gè)匹配項(xiàng)屯阀,直到搜索到字符串末尾為止缅帘。另外,在全局匹配模式下难衰,lastIndex的值在每次調(diào)用exec()后都會(huì)增加钦无,而非全局匹配模式下則始終保持不變「窍【IE的lastIndex每次也會(huì)變化失暂”顺瑁】

RegExp實(shí)例方法:test()

param:接受一個(gè)參數(shù),即要應(yīng)用模式的字符串弟塞;
return:若模式與該參數(shù)匹配則返回true凭峡,否則返回false。
用于一下情況:只想知道目標(biāo)字符串與某個(gè)模式是否匹配决记,但不需要知道其文本內(nèi)容摧冀。

var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;
if(pattern.test(text)){
    alert("match!");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市系宫,隨后出現(xiàn)的幾起案子索昂,更是在濱河造成了極大的恐慌,老刑警劉巖扩借,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椒惨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡潮罪,警方通過查閱死者的電腦和手機(jī)康谆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來错洁,“玉大人秉宿,你說我怎么就攤上這事⊥筒辏” “怎么了描睦?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)导而。 經(jīng)常有香客問我忱叭,道長(zhǎng),這世上最難降的妖魔是什么今艺? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任韵丑,我火速辦了婚禮,結(jié)果婚禮上虚缎,老公的妹妹穿的比我還像新娘撵彻。我一直安慰自己,他們只是感情好实牡,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布陌僵。 她就那樣靜靜地躺著,像睡著了一般创坞。 火紅的嫁衣襯著肌膚如雪碗短。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天题涨,我揣著相機(jī)與錄音偎谁,去河邊找鬼总滩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛巡雨,可吹牛的內(nèi)容都是我干的闰渔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼鸯隅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼澜建!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蝌以,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎何之,沒想到半個(gè)月后跟畅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溶推,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年徊件,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒜危。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虱痕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辐赞,到底是詐尸還是另有隱情部翘,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布响委,位于F島的核電站新思,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赘风。R本人自食惡果不足惜夹囚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邀窃。 院中可真熱鬧荸哟,春花似錦、人聲如沸瞬捕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)山析。三九已至堰燎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笋轨,已是汗流浹背秆剪。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工赊淑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仅讽。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓陶缺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親洁灵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饱岸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容