1. 程式人生 > >es6學習筆記(三)

es6學習筆記(三)

es6學習筆記(三)

正則擴充套件

建構函式的變化

  • es6中如果RegExp建構函式第一個引數是正則物件,那麼可以使用第二個引數指定修飾符。返回的正則表示式會忽略原有的正則表示式的修飾符,只是用新指定的修飾符。
    new RegExp(/abc/ig, 'i').flags
    //"i"
    

正則方法的擴充套件

u修飾符

  • 含義為“Unicode 模式”,用來正確處理四個位元組的 UTF-16 編碼

y修飾符

  • y修飾符叫做黏連修飾符
  • y修飾符的作用與g修飾符類似,也是全域性匹配,後一次匹配都從上一次匹配成功的下一個位置開始。不同之處在於,g修飾符只要剩餘位置中存在匹配就可,而y修飾符確保匹配必須從剩餘的第一個位置開始,這也就是“粘連”的涵義。
    var s = 'aaa_aa_a';
    var r1 = /a+/g;
    var r2 = /a+/y;
    
    //第一找到匹配值aaa,剩下值_aa_a
    r1.exec(s) // ["aaa"]
    r2.exec(s) // ["aaa"]
    
    //第二次匹配中由於_aa_a中不是以a開頭所以y修飾符找不到值返回null
    r1.exec(s) // ["aa"]
    r2.exec(s) // null
    

s修飾符

  • 正則表示式中,點(.)是一個特殊字元,代表任意的單個字元,但是有兩個例外。一個是四個位元組的 UTF-16 字元,這個可以用u修飾符解決;另一個是行終止符。
  • 所謂行終止符,就是該字元表示一行的終結。以下四個字元屬於”行終止符“。
    1. U+000A 換行符(\n)
    2. U+000D 回車符(\r)
    3. U+2028 行分隔符(line separator)
    4. U+2029 段分隔符(paragraph separator)

新增屬性

  • RegExp.prototype.sticky ,與y修飾符相匹配,表示是否設定了y修飾符
    var r = /hello\d/y;
    r.sticky // true
    
  • RegExp.prototype.flags 屬性,返回正則表示式的修飾符
    // ES5 的 source 屬性
    // 返回正則表示式的正文
    /abc/ig.source
    // "abc"
     
    // ES6 的 flags 屬性
    // 返回正則表示式的修飾符
    /abc/ig.flags
    // 'gi'
    
  • RegExp.prototype.unicode 屬性
    const r1 = /hello/;
    const r2 = /hello/u;
    
    r1.unicode // false
    r2.unicode // true