正則的擴展
阿新 • • 發佈:2018-12-19
筆記 abc prot can from cau 函數的參數 earch code
本文為學習筆記;
原文鏈接?<<<<轉載請註明原文出處!
RegExp 構造函數
在 ES5 中,RegExp構造函數的參數有兩種情況:
參數是字符串,這時第二個參數表示正則表達式的修飾符(flag);
var regex = new RegExp('xyz', 'i'); // 等價於 var regex = /xyz/i;
參數是一個正則表示式,這時會返回一個原有正則表達式的拷貝。
var regex = new RegExp(/xyz/i); // 等價於 var regex = /xyz/i;
但是,ES5 不允許此時使用第二個參數添加修飾符,否則會報錯。
var regex = new RegExp(/xyz/, 'i');
// Uncaught TypeError: Cannot supply flags when constructing one RegExp from another
ES6 改變了這種行為。如果RegExp構造函數第一個參數是一個正則對象,那麽可以使用第二個參數指定修飾符。而且,返回的正則表達式會忽略原有的正則表達式的修飾符,只使用新指定的修飾符。
new RegExp(/abc/ig, 'i').flags // "i" 上面代碼中,原有正則對象的修飾符是ig,它會被第二個參數i覆蓋。
字符串的正則方法
字符串對象共有 4 個方法,可以使用正則表達式:match()
、replace()
、search()
和split()
。
ES6 將這 4 個方法,在語言內部全部調用RegExp的實例方法,從而做到所有與正則相關的方法,全都定義在
RegExp
對象上:
String.prototype.match
調用RegExp.prototype[Symbol.match]
String.prototype.replace
調用RegExp.prototype[Symbol.replace]
String.prototype.search
調用RegExp.prototype[Symbol.search]
String.prototype.split
調用RegExp.prototype[Symbol.split]
正則的擴展