这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战
ES2018的其他标准增加了:
dotall-regex即dotall正则表达式named-capturing-groups-regex即命名捕获组正则表达式object-rest-spread即对象静止排列unicode-property-regex即unicode属性正则表达式
简而言之,就是正则的扩展和对象解构赋值,之前的一些文章有提到过相应的内容,此篇文章我们一起再梳理一下。
对象解构赋值
在ES2015之解构赋值这篇文章中,我们已经做过讲解,这次我们再将两个例子。
如何使用
const { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
console.log(x); // 1
console.log(y); // 2
console.log(z); // { a: 3, b: 4 }
我们一般都是一层的解构赋值,但是它还可以嵌套深层的赋值,我们把上述代码做个变形,如下:
const { x, y: { name, enName }, ...z } = { x: 1, y: { name: '也笑', enName: 'slifree' }, a: 3, b: 4 };
console.log(x); // 1
console.log(name,enName); // 也笑 slifree
console.log(z); // { a: 3, b: 4 }
正则扩展
unicode属性正则表达式
正则实例对象新增unicode属性,表示是否设置了u修饰符,使用如下:
/slifree/u.unicode; // true
/slifree/.unicode; // false
命名捕获组正则表达式
命名捕获组通过显式命名,可以通过组名方便的访问到指定的组,而不需要去一个个的数编号,同时避免了在正则表达式扩展过程中,捕获组的增加或减少对引用结果导致的不可控。
简而言之,就是给相同功能的校验编程一个组,然后按照(出现的顺序,从左到右,从1开始进行编号。值得我们注意的是:0编号代表整个字符串
var re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
上述代码中,编了三个组:year、month、day,我们可以这样获取每个组的值:
re.exec("2021-12-05").groups; // {year: '2021', month: '12', day: '05'}
dotall正则表达式
ES2018之前正则表达式中的点(.)无法匹配换行符,如下:
/^.$/.test('\n'); // false
现在加上s就可以匹配到了,如下:
/^.$/s.test('\n'); // true
总结
在项目中,使用正则和解构赋值可以让我们的代码看着更简洁、更清晰。
如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。