正則的拓展

新增y修飾符

y修飾符跟g有點(diǎn)類(lèi)似,但是僅僅是類(lèi)似,y跟g不同的是,g是匹配到一個(gè)后,不管匹配到的字符后面緊跟著的有沒(méi)有匹配到,都會(huì)繼續(xù)匹配,但是y不一樣,y會(huì)在匹配到的字符后面緊著匹配,如果沒(méi)有匹配到,就會(huì)停止匹配,不會(huì)像g那樣一直匹配下去

let reg1=/aa/g;
let reg2=/aa/y;
const str='aaa_aa_a';
console.log(reg1.exec(str));//["aa", index: 0, input: "aaa_aa_a"]
console.log(reg1.exec(str));//["aa", index: 4, input: "aaa_aa_a"]
console.log(reg1.exec(str));//null
console.log(reg2.exec(str));//["aa", index: 0, input: "aaa_aa_a"]
console.log(reg2.exec(str));//null

上面的例子我們可以看出使用y修飾符時(shí),如果匹配不到的話,會(huì)返回null,exec這個(gè)方法返回的是一個(gè)數(shù)組,對(duì)應(yīng)的aa是匹配到的結(jié)果,index是匹配的下標(biāo)位置,input的是匹配的字符,

使用lastIndex,可以更好的說(shuō)明y修飾符

let reg1=/aa/g;
let reg2=/aa/y;
const str='aaa_aa_a';
console.log(reg2.exec(str));//["aa", index: 0, input: "aaa_aa_a"]
reg2.lastIndex=4;//從下標(biāo)4開(kāi)始
const match=reg2.exec(str);
console.log(match);//["aa", index: 4, input: "aaa_aa_a"]
console.log(match.index);//4

lastIndex屬性指定每次搜索的開(kāi)始位置,y修飾符同樣遵守lastIndex屬性,但是要求必須在lastIndex指定的位置發(fā)現(xiàn)匹配。

下面我們看一下split、match加y修飾符方法的效果

let s='ororhellor world'
const reg1=/or/y;
const reg2=/or/g;
console.log(s.split(reg1));//["", "", "hellor world"]
console.log(s.split(reg2));//["", "", "hell", " w", "ld"]
console.log(s.match(reg1));//["or", index: 0, input: "ororhellor world"]
console.log(s.match(reg1));//["or", index: 2, input: "ororhellor world"]
console.log(s.match(reg2));//["or", "or", "or", "or"]
s='hello world';
console.log(s.match(reg1));//null
console.log(s.match(reg2));//["or"]
console.log(s.split(reg1));//["hello world"]

我們可以看出,split加上y修飾符正則,跟我們想像的一樣,匹配不到,就不往后匹配了,直接把hello world返回回來(lái)了,match加上y修飾符正則搞得跟exec方法有點(diǎn)像,不是直接把全部的匹配完,而是得在調(diào)用一次,,,,,,表示好特么累啊,,

sticky、flags、source屬性

let reg1=/[0-9]\d/yi;
let reg2=/[0-9]\d/gm;
console.log(reg1.sticky);//true
console.log(reg2.sticky);//false

let reg=/[a-z]/ygim;
console.log(reg.source);//[z-z]
console.log(reg.flags);/ygim/

sticky屬性返回了正則的是否具有y修飾符,flags返回了正則的修飾符,source返回了正則的匹配。

真正做項(xiàng)目的時(shí)候,好像沒(méi)什么卵用,but,大家還是要漲漲姿勢(shì)的

OK,今天給大家介紹的正則的拓展,雖然不多,但是希望能幫助到大家。

繼續(xù)咱們的慣例=>如果想學(xué)習(xí)更詳細(xì)的資料,請(qǐng)狠狠的點(diǎn)擊這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 所有內(nèi)容基于阮一峰的ECMAScript 6 入門(mén) 1.RegExp構(gòu)造函數(shù) ES6中如果RegExp構(gòu)造函數(shù)第一...
    我才不是稻草人閱讀 593評(píng)論 0 0
  • 請(qǐng)移步:https://blog.cdswyda.com/post/20161102
    依韻宵音閱讀 868評(píng)論 0 21
  • 1. 概述 正則表達(dá)式(regular expression)是一種表達(dá)文本模式(即字符串結(jié)構(gòu))的方法,有點(diǎn)像字符...
    JRG_Orange閱讀 2,714評(píng)論 0 50
  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識(shí)依舊是別人的,自己卻什么都沒(méi)獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,260評(píng)論 0 20
  • 深夜,感冒,嘴里沒(méi)味兒, 一天也沒(méi)怎么吃東西, 胃里空落落的。 想來(lái)想去,還是吃一點(diǎn)吧, 吃什么好呢?! 不如蒸個(gè)...
    有緣同行閱讀 584評(píng)論 0 11

友情鏈接更多精彩內(nèi)容