一:Rest/Spread 属性
Rest 参数与 spread 扩展运算符在 ES6 中已经引入,不过 ES6 中只针对于数组, 在 ES9 中为对象提供了像数组一样的 rest 参数和扩展运算符
//rest 参数
function connect({host, port, ...user}){
console.log(host);
console.log(port);
console.log(user);
}
connect({
host: '127.0.0.1',
port: 3306,
username: 'root',
password: 'root',
type: 'master'
});
//对象合并
const skillOne = {
q1: '孙悟空'
}
const skillTwo = {
q2: '猪八戒'
}
const skillThree = {
q3: '沙师弟'
}
const skillFour = {
q4: '唐僧'
}
const xiyouji = {...skillOne, ...skillTwo, ...skillThree, ...skillFour};
console.log(mangseng)
二:正则表达式命名捕获组
ES9 允许命名捕获组使用符号? <name>,这样获取捕获结果可读性更强
//声明一个字符串
// let str = '<a href="http://www.university.com">大学</a>';
// //提取 url 与 『标签文本』
// const reg = /<a href="(.*)">(.*)<\/a>/;
// //执行
// const result = reg.exec(str);
// console.log(result);
// // console.log(result[1]);
// // console.log(result[2]);
let str = '<a href="http://www.university.com">大学</a>';
//分组命名
const reg = /<a href="(?<url>.*)">(?<text>.*)<\/a>/;
const result = reg.exec(str);
console.log(result.groups.url);
console.log(result.groups.text);
三:正则表达式反向断言
ES9 支持反向断言,通过对匹配结果前面的内容进行判断,对匹配进行筛选。
//声明字符串
let str = 'JS5211314你知道么555啦啦啦';
//正向断言
const reg = /\d+(?=啦)/;
const result = reg.exec(str);
//反向断言
const reg = /(?<=么)\d+/;
const result = reg.exec(str);
console.log(result);
四:正则表达式 dotAll 模式
正则表达式中点.匹配除回车外的任何单字符,标记s改变这种行为,允许行 终止符出现
//dot . 元字符 除换行符以外的任意单个字符
let str = `
<ul>
<li>
<a>西游记</a>
<p>上映日期: 1994-09-10</p>
</li>
<li>
<a>水浒传</a>
<p>上映日期: 1994-07-06</p>
</li>
</ul>`;
//声明正则
// const reg = /<li>\s+<a>(.*?)<\/a>\s+<p>(.*?)<\/p>/;
const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/gs;
//执行匹配
// const result = reg.exec(str);
let result;
let data = [];
while(result = reg.exec(str)){
data.push({title: result[1], time: result[2]});
}
//输出结果
console.log(data);