溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

引用類型-RegExp類型

發(fā)布時(shí)間:2020-07-19 01:24:33 來源:網(wǎng)絡(luò) 閱讀:260 作者:吳金瑞 欄目:網(wǎng)絡(luò)安全

    

JavaScript高級(jí)程序設(shè)計(jì)(第三版)筆記-第五章-RegExp類型

 


 

定義正則表達(dá)式有兩種方式

1、用字面量形式定義正則表達(dá)式:

ver expression = /patterns/flags;

patterns:可以是任何簡(jiǎn)單或者復(fù)雜的正則表達(dá)式
flags:
    g:表示全局
    i:表示不區(qū)分大小寫
    m:表示多行模式,在到達(dá)一行的末尾時(shí)還會(huì)繼續(xù)查找下一行

var patterns1 = /at/g;//匹配字符中所有“at”的實(shí)例var patterns2 = /[bc]at/i;//匹配所有的"bat"或"cat",不區(qū)分大小寫var patterns3 = /.at/gi;//匹配所有的以"at"結(jié)尾的三個(gè)字符的組合,不區(qū)分大小寫

模式中使用的所有元字符都必須轉(zhuǎn)義,正則表達(dá)式中的元字符包括:( [ { \ ^ $ | ) ? * + . ] }

var patterns4 = /\[bc\]at/i;//匹配第一個(gè)"[bc]at",不區(qū)分大小寫

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í)例

引用類型-RegExp類型

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的字符開始的,所以找不到他,當(dāng)?shù)谌握{(diào)用時(shí)又會(huì)從開頭開始。
            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類型

 

RegExp實(shí)例屬性


 

global:是否設(shè)置了g標(biāo)志
ignoreCase:是否設(shè)置了i標(biāo)志
multiline:是否設(shè)置了m標(biāo)志
lastIndex:表示開始搜索下一個(gè)匹配項(xiàng)的字符位置,從0算起
source:正則表達(dá)式的字符串表示

var patterns2 = /\[bc\]at/i;
alert(patterns2.global);  //falsealert(patterns2.source); //"\[bc\]at"

RegExp實(shí)例方法


 

RegExp對(duì)象的主要方法是exec(),專門為捕獲組設(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)在字符串中的位置

引用類型-RegExp類型

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"

引用類型-RegExp類型

對(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ù)查找。

引用類型-RegExp類型

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

引用類型-RegExp類型

正則表達(dá)式的第二種方法是test(),接受一個(gè)參數(shù)。在模式與該參數(shù)匹配的時(shí)返回ture,否則返回false。

RegExp構(gòu)造函數(shù)屬性

長(zhǎng)屬性名       短屬性名               說明
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í)符,所以要通過方括號(hào)語法來訪問他們。

還有9個(gè)用于存儲(chǔ)捕獲組的構(gòu)造函數(shù)屬性,RegExp.$1存儲(chǔ)第一個(gè)捕獲組,以此類推。

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI