基于ES6标准入门(第3版)这本书的笔记
要学习angula,vue,react等新的前端框架,必须先熟悉ES6的语法
RegExp构造函数
在ES5中使用RegExp构造函数写正则表达式的时候,可以是单个参数字符串,匹配字符串的规则
var regex = new RegExp('xyz');
// 等价于
var regex = /xyz/
也可以是两个参数,第一个参数为字符串,表示正则表达式的匹配规则,第二个参数为正则表达式的修饰符
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');
ES6中运行第一个参数是正则表达式,第二个参数是修饰符,而且,如果第一个参数的正则表达式带有修饰符,会忽略第一个参数的修饰符,使用新的修饰符
// 会忽略ig修饰符,使用i修饰符规则
var regex = new RegExp(/xyz/ig,'i');
常见的修饰符含义
| 修饰符 | 描述 |
|---|---|
| i | 执行对大小写不敏感的匹配 |
| g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
| m | 执行多行匹配 |
ES6新增的修饰符和属性
u修饰符
ES6对正则表达式添加了u修饰符,含义为“Unicode模式”,用于匹配大于\uFFF的字符,也就是说,可以正确处理4个字节的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第二次执行匹配的时候剩余字符串为_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’










网友评论