創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),清河門(mén)企業(yè)網(wǎng)站建設(shè),清河門(mén)品牌網(wǎng)站建設(shè),網(wǎng)站定制,清河門(mén)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,清河門(mén)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
JavaScript高級(jí)程序設(shè)計(jì)(第三版)筆記-第五章-RegExp類(lèi)型
定義正則表達(dá)式有兩種方式
1、用字面量形式定義正則表達(dá)式:
ver expression = /patterns/flags;
patterns:可以是任何簡(jiǎn)單或者復(fù)雜的正則表達(dá)式
flags:
g:表示全局
i:表示不區(qū)分大小寫(xiě)
m:表示多行模式,在到達(dá)一行的末尾時(shí)還會(huì)繼續(xù)查找下一行
var patterns1 = /at/g;//匹配字符中所有“at”的實(shí)例var patterns2 = /[bc]at/i;//匹配所有的"bat"或"cat",不區(qū)分大小寫(xiě)var patterns3 = /.at/gi;//匹配所有的以"at"結(jié)尾的三個(gè)字符的組合,不區(qū)分大小寫(xiě)
模式中使用的所有元字符都必須轉(zhuǎn)義,正則表達(dá)式中的元字符包括:( [ { \ ^ $ | ) ? * + . ] }
var patterns4 = /\[bc\]at/i;//匹配第一個(gè)"[bc]at",不區(qū)分大小寫(xiě)
2、用RegExp構(gòu)造函數(shù)定義正則表達(dá)式,他接受兩個(gè)參數(shù)(patterns,flags)
var patterns2 = new RegExp("[bc]at","i");//與var patterns2 = /[bc]at/i;相同
同樣使用RegExp同樣也要對(duì)元字符進(jìn)行轉(zhuǎn)義而且是雙重轉(zhuǎn)義
vqr pattterns4 = new RegExp("\\[bc\\]at","i");與var patterns4 = /\[bc\]at/i;相同
這兩種方法創(chuàng)建的正則表達(dá)式不一樣。正則表達(dá)式字面量會(huì)始終共享一個(gè)RegExp實(shí)例,而使用構(gòu)造函數(shù)創(chuàng)建的每一個(gè)新RegExp實(shí)例都是一個(gè)新實(shí)例
var re = null, i; for(i=0;i<10;i++){//只為/cat/創(chuàng)建了一個(gè)RegExp實(shí)例,第一次調(diào)用成功,第二是失敗,因?yàn)楫?dāng)?shù)诙握{(diào)用時(shí)是從索引值為3的字符開(kāi)始的,所以找不到他,當(dāng)?shù)谌握{(diào)用時(shí)又會(huì)從開(kāi)頭開(kāi)始。 re = /cat/g; re.test("catgghi"); } for(i=0;i<10;i++){//用RegExp構(gòu)造函數(shù)在每次循環(huán)中都會(huì)創(chuàng)建正則表達(dá)式,所以每次調(diào)用test()都會(huì)返回true re = new RegExp("cat","g"); re.test("catgghi"); }
RegExp實(shí)例屬性
global:是否設(shè)置了g標(biāo)志
ignoreCase:是否設(shè)置了i標(biāo)志
multiline:是否設(shè)置了m標(biāo)志
lastIndex:表示開(kāi)始搜索下一個(gè)匹配項(xiàng)的字符位置,從0算起
source:正則表達(dá)式的字符串表示
var patterns2 = /\[bc\]at/i; alert(patterns2.global); //falsealert(patterns2.source); //"\[bc\]at"
RegExp實(shí)例方法
RegExp對(duì)象的主要方法是exec(),專(zhuān)門(mén)為捕獲組設(shè)計(jì)的,接受一個(gè)參數(shù),返回包含匹配項(xiàng)信息的數(shù)組,相對(duì)于Array的實(shí)例,多了兩個(gè)屬性index和input,在數(shù)組中,第一項(xiàng)是匹配的字符串,其他項(xiàng)是與模式中的捕獲組匹配的字符串。
input:表示應(yīng)用正則表達(dá)式的字符串
index:表示匹配項(xiàng)在字符串中的位置
var text = "mom and dad and baby";var pattern = /mom (and dad (and baby)?)?/gi;var matches = pattern.exec(text); alert(matches.index); //0;alert(matches.input); //"mom and dad and baby"alert(matches[0]); //"mom and dad and baby"alert(matches[1]); //"and dad and baby"alert(matches[2]); //"and baby"
對(duì)于exec()方法,設(shè)置了全局標(biāo)志(g),每次也只會(huì)返回一個(gè)匹配項(xiàng)。不設(shè)置全局標(biāo)志的情況下,在同一個(gè)字符串上調(diào)用它是將始終返回第一個(gè)匹配項(xiàng)信息,設(shè)置了(g),每次調(diào)用它時(shí)都會(huì)在字符串中繼續(xù)查找。
var text = "cat, bat, sat, fat";var pattern1 = /.at/;var matches = pattern1.exex(text); alert(matches.index); //0alert(matches[0]); //catalert(pattern1.lastIndex); //0 matches = pattern1.exex(text); alert(matches.index); //0alert(matches[0]); //catalert(pattern1.lastIndex); //0var pattern2 = /.at/g;var matches = pattern2.exex(text); alert(matches.index); //0alert(matches[0]); //catalert(pattern1.lastIndex); //3matches = pattern1.exex(text); alert(matches.index); //5alert(matches[0]); //batalert(pattern1.lastIndex); //8
正則表達(dá)式的第二種方法是test(),接受一個(gè)參數(shù)。在模式與該參數(shù)匹配的時(shí)返回ture,否則返回false。
RegExp構(gòu)造函數(shù)屬性
長(zhǎng)屬性名 短屬性名 說(shuō)明
input $_ 最近一次匹配的字符串
lastMatch $& 最近一次的匹配項(xiàng)
lastParen $+ 最近一次匹配的捕獲組
leftContext $` input字符串中l(wèi)astMatch之前的文本
multiline $* 布爾值,表示是否所有表達(dá)式都使用多行模式。
rightContext $' input字符串中l(wèi)astMatch之后的文本
var text = "this has been a short summer";var pattern = /(.)hort/g;if(pattern.test(text)){ alert(RegExp.input);//(RegExp.$_) //this has been a short summer alert(RegExp.leftContext);//(RegExp["$`"]) //this has been a }
注意:由于某些短屬性名大都不是有效的ECMAScript標(biāo)識(shí)符,所以要通過(guò)方括號(hào)語(yǔ)法來(lái)訪(fǎng)問(wèn)他們。
還有9個(gè)用于存儲(chǔ)捕獲組的構(gòu)造函數(shù)屬性,RegExp.$1存儲(chǔ)第一個(gè)捕獲組,以此類(lèi)推。