ES6系列,4.正則的擴展

(1)RegExp構造函數
  ES5中,RegExp構造函數有兩種:第一種參數是字符串,這時第二個參數表示
  正則表達式的修飾符(flag)。
    var regex = new RegExp('xyz', 'i');
    // 等價於
    var regex = /xyz/i;
  第二種參數是一個正則表示式,這時會返回一個原有正則表達式的拷貝:
    var regex = new RegExp(/xyz/i); // 等價於 var regex = /xyz/i;
  但不容許此時用第二個參數;
  ES6規定,第一個參數是正則對象,也能夠用第二個加修飾符,而且會掩
  蓋原來的修飾符:
    new RegExp(/abc/ig, 'i').flags //i
    flags就是修飾符,i表明不區分大小寫
(2)字符串的正則方法
  字符串對象共有4個方法,能夠使用正則表達式:
    match()、replace()、search()、split()
  ES6將這4個方法,所有定義在RegExp對象上。
(3)u修飾符
  ES6對正則表達式添加了u修飾符,含義爲「Unicode模式」,用來正
  確處理大於\uFFFF的Unicode字符:
    /^\uD83D/u.test('\uD83D\uDC2A') // false
    /^\uD83D/.test('\uD83D\uDC2A') // true
    \uD83D\uDC2A是一個字符,加u以後能夠識別。
  用u字符,同時帶來一下問題
    ' . '字符表明全部字符,碼點大於0xFFFF的,必須用u修飾符;
    Unicode用大括號表示,必須用u才能被識別;
    使用u修飾符,兩次纔會識別大於0x的Uni字符;
      /吉{2}/.test('吉吉') // false
      /吉{2}/u.test('吉吉') // true
    u字符更加嚴格,能夠識別不規範的字符。
(4)y修飾符
  ES6新增y修飾符,叫作粘連修飾符,y修飾符與g修飾符相同,都是全局
  匹配,只不過y是緊跟下一個位置開始,g是後面存在便可:
    var s = 'aaa_aa_a';
    var r1 = /a+/g;
    var r2 = /a+/y;
    r1.exec(s) // ["aaa"]
    r2.exec(s) // ["aaa"]
    r1.exec(s) // ["aa"]
    r2.exec(s) // null
  因爲使用y修飾符,返回null;
(5)sticky屬性
  ES6新增sticky屬性,來判斷是否存在y修飾符:
    var r = /hello\d/y; r.sticky // true
(6)flags屬性
  新增flags屬性,返回正則表達式的修飾符;
  ES5的source返回正則表達式的正文:
    /abc/ig.source //abc
    /abc/ig.flags //ig
(7)s 修飾符:dotAll 模式
  ES5中,' . '表明一切單字符 ,可是如下除外:
  換行符(\n) 回車符(\r)
  ES6新增s修飾符,即dotAll 模式, . 表示任何字符
    /foo.bar/.test('foo\nbar') //false
    /foo.bar/s.test('foo\nbar') // true
  同時增長dotAll屬性,返回是否處於dotAll 模式:
    const re = /foo.bar/s;
    re.dotAll // true
  /s修飾符和多行修飾符/m不衝突,二者一塊兒使用的狀況下,.匹配全部字符,
  而^和$匹配每一行的行首和行尾。正則表達式

相關文章
相關標籤/搜索