ECMAScript6--4.正則擴展

1.正則新增特性

  • 構(gòu)造函數(shù)的變化
  • 正則方法的擴展
    字符串處理的一些正則方法,在ES6中已經(jīng)是調(diào)用了正則對象的方法;
  • u修飾符
  • y修飾符
  • s修飾符

eg1.構(gòu)造函數(shù)發(fā)生的變化
ES6的寫法:
1.允許第一個參數(shù)是正則表達式的方式;
2.允許第二個參數(shù)在去填寫這個修飾符,結(jié)果就是后面的修飾符會覆蓋前邊正則表達式所用的修飾符;

    {
    //ES5中正則第一種寫法:兩個參數(shù)(第一個參數(shù)必須是字符串)
    let regex = new RegExp('xyz','i');//i忽略大小寫

    //ES5中第二種寫法:1個參數(shù)
    let regex2 = new RegExp(/xyz/i);
    
    console.log(regex.test('xyz123'),regex2.test('xyz123'));//true true
         
    //ES6的寫法:      
    flags 獲取正則對象修飾符的一個屬性;        
    //用這種方法生成構(gòu)造函數(shù),第二個參數(shù)的修飾符會覆蓋第一個參數(shù)所指定的ig修飾符
    let regex3 = new RegExp(/xyz/ig,'i');
    console.log(regex3.flags); //i

}

2.y修飾符
--gy修飾符都是全局匹配;
* 全局匹配的不同點是:
g:是從上一次匹配的位置繼續(xù)尋找直到找到匹配的位置開始;
不強調(diào)是必須是在我匹配的下一個字符開始匹配;
(不強調(diào)必須是第一個就匹配上,中間任何位置匹配上都算)
y:匹配的第一個必須是緊跟著的下一個字符開始匹配成功才算;

{
    let s ='bbb_bb_b';
    let a1 = /b+/g;
    let a2 =/b+/y;
    
    console.log('one',a1.exec(s),a2.exec(s));
    //輸出:
    one {"bbb",index:0,input:"bbb_bb_b"}     {"bbb",index:0,input:"bbb_bb_b"}
    
    console.log('two',a1.exec(s),a2.exec(s));
    //輸出:
    1.用g做修飾符a1繼續(xù)匹配到了“bb”;
    2.用y做修飾符最后匹配的結(jié)果是null;
    bbb之后第一個是_(下劃線)已經(jīng)不滿足b+這種匹配模式,導致匹配失??;
    two {"bb",index:4,input:"bbb_bb_b"}  null
    
    
    // *如何判斷當前的正則對象是不是開啟了粘連模式(y修飾符這種模式);
    ---sticky
    console.log(a1.sticky,a2.sticky);//false true

}

3.u修飾符--u(unicode的縮寫)
在正則處理unicode字符的時候的一個特征值;
* u修飾符作用:
1.處理的字符串正則表達式中有大于兩個字節(jié)長度的字符,一定要加u;
2.點字符(.)并不是能匹配所有的字符;條件是:要小于兩個字節(jié)長度的一個字符;

{
    // /^uD83D/匹配模式  '\uD83D\uDC2A'匹配字符串
    console.log('u-1',/^uD83D/.test('\uD83D\uDC2A'));
//u-1 true 沒加u會把4個字節(jié)當成了兩個字母或兩個字符;這個對應(yīng)的是兩個字符;所以可以匹配成功;
    console.log('u-2',/^uD83D/u.test('\uD83D\uDC2A'));
    //u-2 false u會把4個字節(jié)當做一個字符;相當于unicode中一個編碼對應(yīng)的一個字符;

    //{61}是作為一個unicode字符的,不加u是不會被識別的;
    console.log(/\u{61}/.test('a')); //false
    //大括號里面放的是unicode編碼,一定要加上u修飾符才能被js解釋器成功識別
    console.log(/\u{61}/u.test('a')); //true

--*原來正則匹配中有個點字符(.)可以代表任意字符,這個點字符只是能識別小于0xf這么一個unicode
   字符;如果這個字符的unicode編碼超過兩個字節(jié)就沒法識別了;
 --點字符有四個字符是不能處理的:換行符、回車符、行分隔符、段分隔符;
 --點字符在u修飾符下可以識別超過兩個字節(jié)長度的unicode字符,但是遇到換行符、回車符、行分隔符、
     段分隔符,這個要加s修飾符(ES6目前沒有實現(xiàn));
   
    \u{}表示是一個unicode編碼;
    
     console.log('\u{20BB7}');//吉
     
     let s='吉';
     console.log('u',/^.$/.test(s));//u false
     console.log('u-2',/^.$/u.test(s));//u-2 true

*---如果你的字符串中有的字符是大于兩個字節(jié)的,一定要加u修飾符,才能正確的去識別;    


    console.log('test',/吉{2}/.test('吉吉'));//test false
    console.log('test-2',/吉{2}/u.test('吉吉'));//test-2 true
}

4.s修飾符
在ES6并沒有真正實現(xiàn),只是作為提案;
--點字符在u修飾符下可以識別超過兩個字節(jié)長度的unicode字符,但是遇到換行符、回車符、行分隔符、段分隔符,這個要加s修飾符(ES6目前沒有實現(xiàn));

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

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

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