ES6 正则表达式的扩展

基于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’

你可能感兴趣的:(ES6 正则表达式的扩展)