JavaScript正則對(duì)象常用方法

正則常用的一些方法

1. test()

regexp.test(str)

作用: 檢測一個(gè)字符串是否匹配某個(gè)正則娜庇。滿足返回true,否則返回false再登。此方法的返回結(jié)果會(huì)受到是否加全局標(biāo)志g的影響

未加全局g測試代碼:

var regexp = /^1[3-9]\d{9}$/; // 手機(jī)號(hào)正則
console.log( regexp.lastIndex ); // 0 
console.log( regexp.test('13588888888') ); // true
console.log( regexp.lastIndex ); // 0 
console.log( regexp.test('18588888888') ); // true
console.log( regexp.lastIndex ); // 0
console.log( regexp.test('12588888888') ); // false 第2位不滿足

lastIndex屬性是正則下次往后匹配的起始位置
可見,未加全局g,則lastIndex屬性值一直從0開始往后匹配付秕。

加全局g測試代碼:

var regexp = /^1[3-9]\d{9}$/g;

console.log( regexp.lastIndex ); // 0   默認(rèn)從下標(biāo)0向后匹配
console.log( regexp.test('13588888888') ); // true

console.log( regexp.lastIndex ); // 11 后面往后匹配的下標(biāo)位置
console.log( regexp.test('13588888888') ); // false

console.log( regexp.lastIndex); // 0 上面匹配失敗下標(biāo)重置為0
console.log( regexp.test('13588888888') ); // true

//如此循環(huán)著此過程

可見兰珍,加全局g的時(shí)候,lastIndex屬性的值會(huì)受到test方法的影響询吴。導(dǎo)致每次往后匹配的下標(biāo)值是不一樣的掠河,若多次調(diào)用test方法會(huì)重復(fù)上面的過程。

若想每次都從下標(biāo)0開始往后匹配汰寓,只需調(diào)用test前把lastIndex屬性重置為0即可口柳。

regexp.lastIndex  = 0 ; // 重置為0
console.log( regexp.test('13588888888') ); // true

所以一般判斷一個(gè)字符串是否滿足一個(gè)正則,即對(duì)于結(jié)果是true或false的情況有滑,此時(shí)正則建議不加全局g,這可讓lastIndex屬性每次都是從0開始向后匹配跃闹。

2. exec()

regexp.exec(str)

作用: 返回正則匹配的結(jié)果,以一個(gè)數(shù)組返回 毛好。此數(shù)組第一個(gè)元素(下標(biāo)0)是正則相匹配的字符串望艺,后面的下標(biāo)元素依次是括號(hào)中捕獲組匹配的內(nèi)容。未匹配到則返回null

此方法和test一樣肌访,其返回結(jié)果都會(huì)受到正則全局標(biāo)識(shí)g的影響找默。

未全局g測試:

var regexp = /(\d{3})\d{4}(\d{4})/; 
regexp.exec('13588888888') ; // ["13588888888", "135", "8888", index: 0, input: "13588888888"]
regexp.lastIndex; // 0
regexp.exec('13588888888') ; // ["13588888888", "135", "8888", index: 0, input: "13588888888"]
regexp.lastIndex; // 0
regexp.exec('13588888888') ; // ["13588888888", "135", "8888", index: 0, input: "13588888888"]

可見,匹配的結(jié)果都是一樣的吼驶,結(jié)果為:[13588888888'惩激,'135','8888']
下標(biāo)0為1358888888是正則匹配的結(jié)果蟹演。
下標(biāo)1為135是正則第1個(gè)捕獲組匹配的結(jié)果风钻。
下標(biāo)2為8888是正則第2個(gè)捕獲組匹配的結(jié)果。
...
多個(gè)捕獲組的匹配結(jié)果以此類推

加全局g測試:

    var regexp = /(\d{3})\d{4}(\d{4})/g; 
    regexp.lastIndex; // 0
    regexp.exec('13588888888'); // ["13588888888", "135", "8888",   index: 0, input: "13588888888"]
    regexp.lastIndex; // 11
    regexp.exec('13588888888'); // null
    regexp.lastIndex; // 0
    regexp.exec('13588888888'); // ["13588888888", "135", "8888", index: 0, input: "13588888888"]

結(jié)果和上面未加g代碼測試結(jié)果一樣酒请,只是每次調(diào)用exec方法骡技,其正則對(duì)象lastIndex屬性值的下次起始匹配位置都會(huì)改變,這個(gè)變化和test方法是一樣的。

while循環(huán)exec方法

當(dāng)正則加了全局標(biāo)識(shí)g時(shí)布朦,若要使用exec方法獲取正則匹配的所有結(jié)果囤萤,一次次調(diào)用exec顯然不行的,因?yàn)槠ヅ涑晒蜁?huì)停止是趴,再次通過lastIndex屬性的下標(biāo)值繼續(xù)往后匹配涛舍,因此不知道要調(diào)用多少次exec方法才可獲得匹配的所有結(jié)果,一般做法是使用while循環(huán)exec方法唆途,直到未匹配為止做盅。
如下:

var str = '13423455678php18912345678';
var reg = /(\d{3})\d{4}(\d{4})/g;
var result = [];
var row;
while( row = reg.exec(str)){
    result.push(row);
}

console.log( result );

結(jié)果:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市窘哈,隨后出現(xiàn)的幾起案子吹榴,更是在濱河造成了極大的恐慌,老刑警劉巖滚婉,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件图筹,死亡現(xiàn)場離奇詭異,居然都是意外死亡让腹,警方通過查閱死者的電腦和手機(jī)远剩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骇窍,“玉大人瓜晤,你說我怎么就攤上這事「鼓桑” “怎么了痢掠?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嘲恍。 經(jīng)常有香客問我足画,道長,這世上最難降的妖魔是什么佃牛? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任淹辞,我火速辦了婚禮,結(jié)果婚禮上俘侠,老公的妹妹穿的比我還像新娘象缀。我一直安慰自己,他們只是感情好爷速,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布央星。 她就那樣靜靜地躺著,像睡著了一般遍希。 火紅的嫁衣襯著肌膚如雪等曼。 梳的紋絲不亂的頭發(fā)上里烦,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天凿蒜,我揣著相機(jī)與錄音禁谦,去河邊找鬼。 笑死废封,一個(gè)胖子當(dāng)著我的面吹牛州泊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漂洋,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼遥皂,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了刽漂?” 一聲冷哼從身側(cè)響起演训,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贝咙,沒想到半個(gè)月后样悟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庭猩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年窟她,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔼水。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡震糖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趴腋,到底是詐尸還是另有隱情吊说,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布优炬,位于F島的核電站疏叨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏穿剖。R本人自食惡果不足惜蚤蔓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糊余。 院中可真熱鬧秀又,春花似錦、人聲如沸贬芥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蘸劈。三九已至昏苏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贤惯。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工洼专, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孵构。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓屁商,卻偏偏與公主長得像,于是被迫代替她去往敵國和親颈墅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜡镶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348