1.RegExp對象 正則表達(dá)式的基本語法是:/正則表達(dá)式主體/修飾符(可選),這種創(chuàng)建正則的方法稱為“字面量創(chuàng)建正則表達(dá)式”。 在 js中已經(jīng)為正則表達(dá)式提供了一個“構(gòu)造函數(shù)RegExp”,我們可以通過這個構(gòu)造函數(shù)生成正則表達(dá)式的實(shí)例, 這種創(chuàng)建正則的方法稱之為“構(gòu)造函數(shù)創(chuàng)建正則表達(dá)式”。 對于RegExp函數(shù)生成的正則實(shí)例,既能夠和之前使用正則表達(dá)式一樣直接使用,還可以調(diào)用一些RegExp獨(dú)有的方法。 語法: var reg = new RegExp('正則表達(dá)式主體','修飾符'); //RegExp也稱為“正則類” 注意,通過構(gòu)造函數(shù)方式創(chuàng)建正則表達(dá)式,參數(shù)均采用“字符串”的形式來聲明! 特別注意,這種方式的正則表達(dá)式主體在使用元字符時,需要使用轉(zhuǎn)義字符“\”,比如“\\d、\\s”等 2.RegExp對象方法 ?、?nbsp;test()方法,用于判斷在目標(biāo)字符串中是否存在滿足正則表達(dá)式規(guī)則的子字符串,返回值為Boolean。 語法:正則表達(dá)式 .test( ' 指定字符串 ' ); // true || false 示例: var regExp = new RegExp('ab', 'g'); var res = regExp .test('abc123AABBCC'); console .log(res); //返回值為“true” RegExp中提供的方法對于“字面量創(chuàng)建正則表達(dá)式”也是適用的,示例如下: console.log(/ab/g .test('abc123AABBCC')); // true ?、?nbsp;exec()方法,用于查找在目標(biāo)字符串中“第一個”滿足正則表達(dá)式的子字符串出現(xiàn)的“下標(biāo)和內(nèi)容” 返回值是一個信息集合(對象),可以像數(shù)組一樣使用,查找失敗則返回 null 語法:正則表達(dá)式 .exec('目標(biāo)字符串'); 示例01: var regExp = new RegExp('ab', 'ig'); var res = regExp .exec('abc123AABBCC'); console .log(res); //返回值:["ab", index: 0, input: "abc123AABBCC", groups: undefined] res = regExp .exec('abc123AABBCC'); console .log(res); //返回值:["ab", index: 7, input: "abc123AABBCC", groups: undefined] res = regExp .exec('abc123AABBCC'); console .log(res); //返回值:null 可以看出,當(dāng) exec()方法連續(xù)多次查找時,每次查找都是建立在前一次的基礎(chǔ)上,依次向后匹配。 這是由于RegExp正則對象中提供了一個隱式參數(shù)“l(fā)astIndex”, 這個參數(shù)將記錄每次執(zhí)行檢索完成時,匹配結(jié)果的最后一個字符的下標(biāo),并且將其作為下次檢索的開始位置。 這個屬性是可寫的, 如果上述示例中第一次檢索完成后增加“res.lastIndex=0;”,那么第二次檢索返回值將和第一次相同。 示例02: var regExp = new RegExp('(ab)c', 'ig'); var res = regExp .exec('abc123AABBCC'); console .log(res); //返回值:["abc", "ab", index: 0, input: "abc123AABBCC", groups: undefined] console .log(res.length); // 返回值:2 上述結(jié)果看出,當(dāng)聲明正則的時候,如果參數(shù)中存在小括號(又稱作組匹配符號), 3.檢索模式的“^和$”字符 “ ^ ”初位字符,表示判斷字符串以某個內(nèi)容開始 “ $ ”末位字符,表示判斷字符串以某個內(nèi)容結(jié)束 語法示例: var regExp = new RegExp('^abc','ig'); //判斷是否以abc字符串開始 var regExp = new RegExp('abc$','ig'); //判斷是否以abc字符串結(jié)束 如果同時使用“^和$”(如“^abc$”),表示在目標(biāo)字符串中與正則字符串本身相同 代碼示例: var regExp=new RegExp('c$','ig'); var str='abc123AABBCC'; var res=regExp.test(str); console.log(res); // true 4.重復(fù)類 重復(fù)類是正則表達(dá)式中使用大括號“{}”進(jìn)行檢索的一種模式,{}用來匹配符合正則要求的字符串連續(xù)出現(xiàn)的次數(shù)。 通常配合表達(dá)式模式一起使用 常見寫法有以下三種: {n},表示檢索內(nèi)容連續(xù)出現(xiàn) n次 {n,},表示檢索內(nèi)容至少連續(xù)出現(xiàn) n次 {n,m},表示檢索內(nèi)容連續(xù)出現(xiàn)大于等于 n次,小于等于 m次 語法示例: var regExp = new RegExp('[a-z]{2}','g'); //表示 全局檢索連續(xù)出現(xiàn)的兩個小寫字母 代碼示例: var regExp=new RegExp('[a-z]{2}','ig'); var str='abc123AABBCC'; var res=str.match(regExp); console.log(res); //返回結(jié)果:(4) ["ab", "AA", "BB", "CC"] 注意,如果不存在“組匹配符號”,那么重復(fù)類僅對其前面的一個字符有效! 示例代碼: var regExp=new RegExp('ab{2}','ig'); var str='abcabc123AABBCC'; var res=str.match(regExp); console.log(res); //返回結(jié)果:["ABB"] var regExp=new RegExp('(abc){2}','ig'); var str='abcabc123AABBCC'; var res=str.match(regExp); console.log(res); //返回結(jié)果:["abcabc"] 5.貪婪模式、懶惰模式 貪婪模式(greed)、懶惰模式(lazy),這兩種模式都是被固化至表達(dá)式內(nèi)的兩種隱形的檢索模式, 它們不屬于任何一種前述的檢索模式,而是在此之外隱形生效的。 貪婪模式, 正則要求就一直向下匹配,直到無法再匹配為止的行為模式(如 n*) 懶惰模式, 一旦匹配到符合正則要求的內(nèi)容就立即結(jié)束檢索的行為模式(如 n?) 在正則中,不同的符號可以隱式說明當(dāng)前的正則是采用貪婪模式還是懶惰模式。 常見符號: 貪婪模式:+、*、{n,}、{n,m}、…… 懶惰模式:+?、?、*?、{n}、{n}?、{n,m}?、…… 代碼示例: //---貪婪模式--- var regExp=new RegExp('s[a-z0-9]+s','ig'); var str='abscabc12S3AeSvBhC2286s96'; var res=str.match(regExp); console.log(res); //返回值:["scabc12S3AeSvBhC2286s"] //---懶惰模式--- var regExp=new RegExp('s[a-z0-9]+?s','ig'); var str='abscabc12S3AeSvBhC2286s96'; var res=str.match(regExp); console.log(res); //返回值:["scabc12S", "SvBhC2286s"] 6.脫字符 脫字符是正則中“^”符號的一種特殊表達(dá)方式,表示“不是……”的意思, 當(dāng)且僅當(dāng)“^”符號出現(xiàn)在中括號的首位時,我們稱之為脫字符。 寫在正則主體首位而不是中括號內(nèi)表示初位字符,寫在中括號內(nèi)卻沒有寫在首位則表示普通字符。 中括號內(nèi)只有脫字符時“[^]”,表示所有字符! 代碼示例: var regExp=new RegExp('[^bc]+','ig'); var str='abscabc12S3AeSvBhC2286s96'; var res=str.match(regExp); console.log(res); //返回結(jié)果:["a", "s", "a", "12S3AeSv", "h", "2286s96"]
|
|