新增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)擊這里