正規表示式學習筆記(5)- ES6新增及參考連結

hahadelphi發表於2021-09-09

注:摘自阮一峰老師的《ECMAScript 6 入門》

5. ES6新增

  • 建構函式可以新增第二個規則引數
// es5新增第二個引數時會報錯
var regex = new RegExp(/test/, 'i');

// es6
var regex = new RegExp(/test/, 'ig');
regex.flags; // ig
  • 新增了u修飾符,含義為"Unicode"模式,用來正確處理大於uFFFF的Unicode字元。
// uD83DuDC2A會被es5認為是兩個字元,加了u之後就會被認定為一個字元
/^uD83D/u.test('uD83DuDC2A'); // false
/^uD83D/.test('uD83DuDC2A');  // true

u字元對正規表示式行為造成的影響,具體參考阮一峰的

  • 新增了y修飾符(粘連修飾符),全域性匹配,但必須從剩餘字串的第一個位置進行匹配。
var str = 'aaa_aa_a',
    reg1 = /a+/g,
    reg2 = /a+/y;

reg1.exec(str); // aaa
reg2.exec(str); // aaa

reg1.exec(str); // aa
// 第二次執為null,是因為剩餘字串為_aa_a,必須從頭部開始匹配,因此沒有匹配到規則`a+`
// 若將reg1和reg2修改為`/a+_/g`和/a+_/y,結果將相同
reg2.exec(str); // null
  • 增加了RegExp例項屬性sticky,表示是否設定了y標誌
var r = /test/y;
r.sticky;   // true
  • 增加了RegExp例項屬性flags,表示正規表示式的修飾符
var r = /test/ig;
r.flags;   // gi
  • 建構函式增加方法RegExp.escape(),表示對字串轉義,用於正則模式
RegExp.escape('The Quick Brown Fox');
// "The Quick Brown Fox"

RegExp.escape('Buy it. use it. break it. fix it.');
// "Buy it. use it. break it. fix it."

RegExp.escape('(*.*)');
// "(*.*)"
  • 增加修飾符s,可以使得.可以匹配任意單個字元,包括行終止符(n,r,U+2018,U+2029)
const re = /foo.bar/s;
// 另一種寫法
// const re = new RegExp('foo.bar', 's');

re.test('foonbar') // true
re.dotAll // true
re.flags // 's'
  • 支援後行斷言,具體參看所講

  • Unicode屬性類

目前,有一個提案,引入了一種新的類的寫法p{...}和P{...},允許正規表示式匹配符合Unicode某種屬性的所有字元。

// 匹配所有數字
const regex = /^p{Number}+$/u;
regex.test('²³¹¼½¾') // true
regex.test('㉛㉜㉝') // true
regex.test('ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ') // true

6. 參考資料

  • 書籍

《JavaScript Ninja》

《JavaScript高階程式設計(第三版)》

《JavaScript權威指南》

  • 連結

http://blog.csdn.net/u012047933/article/details/38365541

http://www.cnblogs.com/iyangyuan/archive/2013/05/30/3107390.html

http://blog.csdn.net/yuzhongzi81/article/details/45582319

http://www.cnblogs.com/tugenhua0707/p/5037811.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2471/viewspace-2798677/,如需轉載,請註明出處,否則將追究法律責任。

相關文章