正则表达式是前端开发中常用的工具之一,它用于匹配文本中的特定字符序列。在 ECMA 6 中,正则表达式已经有了很多的改进和更新,而在 ECMAScript 2020 中,正则表达式又新增了一些新特性。
新增特性
RegExp#matchAll()
在过去,我们使用 RegExp.exec()
来进行所有匹配,但是这个方法在它被调用之前需要你先知道你要匹配的次数,或者你要使用多个函数来处理不同的匹配。RegExp#matchAll()
可以返回一个所有没有被捕获的模式匹配项的迭代器,以及所有捕获值的数组的迭代器。
const str = "In this year we will have 3 blue moons."; const regex = /\d+/g; for (const match of str.matchAll(regex)) { console.log(match); }
Capturing Groups 命名捕获组
在以前的版本中,捕获的组被依次编号。在 ECMAScript 2020 中,你现在可以使用命名捕获组,已方便您阅读正则表达式,并更轻松地从捕获组中获取所需的值。
const regex = /(?<day>\d{2})-(?<month>\d{2})-(?<year>\d{4})/; const {day, month, year} = regex.exec('10-04-2021').groups; console.log(day, month, year); // 10 04 2021
RegExp#replaceAll()
RegExp#replaceAll()
可以替换修改所有匹配项,与 String#replaceAll()
相似,但在所有情况下都是基于正则表达式进行的。这意味着你可以在修改文本之前使用更准确的匹配方法。
const str = "I am Jason Chen."; const regex = /\w+/g; const newStr = str.replaceAll(regex, 'Mr.'); console.log(newStr); // Mr. Mr. Mr.
指导意义
这些新特性可以帮助你将正则表达式的使用带到一个更高的水平。RegExp#matchAll()
的迭代器特性允许你使用 for...of 循环表达式,在每次迭代时访问每个重新匹配的结果。命名捕获组可以帮助您更好地阅读正则表达式,并提供方便的语法来访问捕获值。RegExp#replaceAll()
实现了一种直接替换所有匹配项的方法。
在使用这些新特性的过程中,请确保你已经了解了正则表达式的基础知识,并意识到这些新特性的作用和适用场景。
在提升自己对正则表达式的使用水平的同时,也不要忘记规避正则表达式滥用所带来的潜在影响。
小结
ECMAScript 2020 中新增的正则表达式特性包含三个方面: RegExp#matchAll()
迭代器特性,命名捕获组以及 RegExp#replaceAll()
的函数。使用这些新特性可以帮助你提高你的正则表达式使用能力,更好地理解代码,并提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67b876b6306f20b3a6638c37