前面的話
正則表達式是javascript操作字符串的一個重要組成部分,但在以往的版本中并未有太多改變。然而,在ES6中,隨著字符串操作的變更, ES6也對正則表達式進行了一些更新。本文將詳細介紹ES6正則表達式擴展
構(gòu)造函數(shù)
在 ES5 中,RegExp構(gòu)造函數(shù)的參數(shù)有兩種情況。
第一種情況是,參數(shù)是字符串,這時第二個參數(shù)表示正則表達式的修飾符(flag)
var regex = new RegExp('xyz', 'i');// 等價于var regex = /xyz/i;第二種情況是,參數(shù)是一個正則表示式,這時會返回一個原有正則表達式的拷貝
var regex = new RegExp(/xyz/i);// 等價于var regex = /xyz/i;
但是,ES5 不允許此時使用第二個參數(shù)添加修飾符,否則會報錯
// Uncaught TypeError: Cannot supply flags when constructing one RegExp from anothervar regex = new RegExp(/xyz/, 'i');
ES6 改變了這種行為。如果RegExp構(gòu)造函數(shù)第一個參數(shù)是一個正則對象,那么可以使用第二個參數(shù)指定修飾符。而且,返回的正則表達式會忽略原有的正則表達式的修飾符,只使用新指定的修飾符
console.log(new RegExp(/abc/ig, 'i').flags);//i
上面代碼中,原有正則對象的修飾符是ig,它會被第二個參數(shù)i覆蓋
【flags】
ES6 為正則表達式新增了flags屬性,會返回正則表達式的修飾符
//ES5的source屬性返回正則表達式的正文/abc/ig.source//"abc"// ES6的flags屬性返回正則表達式的修飾符/abc/ig.flags//'gi'
正則方法
字符串對象共有4個方法,可以使用正則表達式:match()、replace()、search()和split()
ES6 將這4個方法,在語言內(nèi)部全部調(diào)用RegExp的實例方法,從而做到所有與正則相關(guān)的方法,全都定義在RegExp對象上
String.prototype.match 調(diào)用 RegExp.prototype[Symbol.match]String.prototype.replace 調(diào)用 RegExp.prototype[Symbol.replace]String.prototype.search 調(diào)用 RegExp.prototype[Symbol.search]String.prototype.split 調(diào)用 RegExp.prototype[Symbol.split]
u修飾符
正則表達式可以完成簡單的字符串操作,但默認將字符串中的每一個字符按照16位編碼處理。為了解決這個問題, ES6 對正則表達式添加了u修飾符,含義為“Unicode模式”,用來正確處理大于/uFFFF的 Unicode 字符。也就是說,會正確處理四個字節(jié)的 UTF-16 編碼
/^/uD83D/u.test('/uD83D/uDC2A') // false/^/uD83D/.test('/uD83D/uDC2A') // true一旦為正則表達式設(shè)置了 u 修飾符,正則表達式將會識別32位的輔助平面字符為1個字符,而不是兩個
【點號】
點(.)字符在正則表達式中,含義是除了換行符以外的任意單個字符。對于碼位大于0xFFFF的 Unicode 字符,點字符不能識別,必須加上u修飾符
var text = "
注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
新聞熱點
疑難解答