基于ES6標準入門(第3版)這本書的筆記
要學習angula,vue叭爱,react等新的前端框架指蚁,必須先熟悉ES6的語法
RegExp構(gòu)造函數(shù)
在ES5中使用RegExp構(gòu)造函數(shù)寫正則表達式的時候盖桥,可以是單個參數(shù)字符串,匹配字符串的規(guī)則
var regex = new RegExp('xyz');
// 等價于
var regex = /xyz/
也可以是兩個參數(shù),第一個參數(shù)為字符串革屠,表示正則表達式的匹配規(guī)則锚赤,第二個參數(shù)為正則表達式的修飾符
var regex = new RegExp('xyz','i');
// 等價于
var regex = /xyz/i
也可以是單個參數(shù)正則表達式帶修飾符
var regex = new RegExp(/xyz/i);
// 等價于
var regex = /xyz/i
但是ES5不允許第一個參數(shù)為正則表達式匹舞,第二個參數(shù)為修飾符,這樣會報錯
var regex = new RegExp(/xyz/,'i');
ES6中運行第一個參數(shù)是正則表達式,第二個參數(shù)是修飾符线脚,而且赐稽,如果第一個參數(shù)的正則表達式帶有修飾符,會忽略第一個參數(shù)的修飾符浑侥,使用新的修飾符
// 會忽略ig修飾符姊舵,使用i修飾符規(guī)則
var regex = new RegExp(/xyz/ig,'i');
常見的修飾符含義
修飾符 | 描述 |
---|---|
i | 執(zhí)行對大小寫不敏感的匹配 |
g | 執(zhí)行全局匹配(查找所有匹配而非在找到第一個匹配后停止) |
m | 執(zhí)行多行匹配 |
ES6新增的修飾符和屬性
u修飾符
ES6對正則表達式添加了u修飾符,含義為“Unicode模式”寓落,用于匹配大于\uFFF的字符,也就是說括丁,可以正確處理4個字節(jié)的UTF-16編碼
/^\uD83D/u.test('\uD83D\uDC2A') // false
/^\uD83D/.test('\uD83D\uDC2A') // true
y修飾符
ES6對正則表達式添加了y修飾符,叫做“粘連”(sticky)伶选。y修飾符與g修飾符類似史飞,也是全局匹配,后一次匹配都是從上一次匹配成功的下一個位置開始仰税。不同的是构资,g修飾符只要剩余位置中存在匹配就可以,而y修飾符要求匹配必須從生于的第一個位置開始陨簇。
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"]
// 因為y第二次執(zhí)行匹配的時候剩余字符串為_aa_a吐绵,所以y修飾符的正則無法匹配,返回null
r2.exec(s); // 返回 null
與y修飾符相匹配河绽,ES6的正則對象多了sticky屬性己单,表示是否設置了y修飾符
var r1 = /a+/y;
r1.sticky // true
flags 屬性
ES6為正則表達式新增了flags屬性,會返回正則表達式的修飾符
// ES5 source屬性返回正則表達式正文
/xyz/ig.source // "xyz"
// ES6 flags屬性返回正則表達式修飾符
/xyz/ig.flags // ‘ig’