Rest/Spread 属性

Rest 参数与 spread 扩展运算符在 ES6 中已经引入,不过 ES6 中只针对于数组, 在 ES9 中为对象提供了像数组一样的 rest 参数和扩展运算符

  1. function connect({host, port, ...user}) {
  2. console.log(host);
  3. console.log(port);
  4. console.log(user);
  5. }
  6. connect({
  7. host: '127.0.0.1',
  8. port: 3306,
  9. username: 'root',
  10. password: 'root',
  11. type: 'master'
  12. });

正则表达式命名捕获组

ES9 允许命名捕获组使用符号『?』,这样获取捕获结果可读性更强

  1. let str = '<a href="https://www.baidu.com">百度</a>';
  2. const reg = /<a href="(?<url>.*)">(?<text>.*)<\/a>/;
  3. const result = reg.exec(str);
  4. console.log(result.groups.url);
  5. console.log(result.groups.text);

正则表达式反向断言

ES9 支持反向断言,通过对匹配结果前面的内容进行判断,对匹配进行筛选。

  1. // 声明字符串
  2. let str = 'JS5211314你知道么 555啦啦啦';
  3. // 正向断言
  4. const reg = /\d+(?=啦)/;
  5. const result = reg.exec(str);
  6. // 反向断言
  7. const reg = /(?<=么)\d+/;
  8. const result = reg.exec(str);
  9. console.log(result);

正则表达式 dotAll 模式

正则表达式中点.匹配除回车外的任何单字符,标记『s』改变这种行为,允许行 终止符出现

  1. let str = ` <ul>
  2. <ul>
  3. <li>
  4. <a>肖生克的救赎</a>
  5. <p>上映日期: 1994-09-10</p>
  6. </li>
  7. <li>
  8. <a>阿甘正传</a>
  9. <p>上映日期: 1994-07-06</p>
  10. </li>
  11. </ul>`;
  12. // 声明正则
  13. const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/gs;
  14. // 执行匹配
  15. const result = reg.exec(str);
  16. let result;
  17. let data = [];
  18. while(result = reg.exec(str)){
  19. data.push({title: result[1], time: result[2]});
  20. }
  21. // 输出结果
  22. console.log(data);