正则表达式是前端开发中常用的一种工具,可以用于字符串匹配、替换、校验等操作。随着 ECMAScript 的不断更新,正则表达式的功能也得到了不断增强和改进。本文将介绍 ECMAScript 2021 带来的正则表达式改进与增强,包括新的正则表达式特性、语法改进和示例代码。
1. Unicode 属性转义
在 ECMAScript 2021 中,正则表达式新增了 Unicode 属性转义,可以用于匹配 Unicode 中的特定属性。语法为 p{属性名}
,其中 属性名
表示 Unicode 属性的名称。例如,p{Script=Greek}
可以用于匹配希腊语字母。
示例代码:
const str = 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ'; const regex = /\p{Script=Greek}/gu; console.log(str.match(regex)); // ["Α", "Β", "Γ", "Δ", "Ε", "Ζ", "Η", "Θ", "Ι", "Κ", "Λ", "Μ", "Ν", "Ξ", "Ο", "Π", "Ρ", "Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω"]
2. 具名捕获组
在以往的正则表达式中,捕获组只能通过索引来引用。而在 ECMAScript 2021 中,可以使用具名捕获组,通过名称来引用捕获的内容。语法为 (?<组名>正则表达式)
,其中 <组名>
表示捕获组的名称。
示例代码:
const regex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const match = regex.exec('2022-01-01'); console.log(match.groups.year); // "2022" console.log(match.groups.month); // "01" console.log(match.groups.day); // "01"
3. s 修饰符
在 ECMAScript 2021 中,正则表达式新增了 s 修饰符,可以让点号 .
匹配任意字符,包括换行符。在以往的正则表达式中,点号 .
只能匹配除换行符外的任意字符。
示例代码:
const regex = /foo.bar/s; console.log(regex.test('foo\nbar')); // true
4. 环视断言
在正则表达式中,环视断言是一种零宽度匹配,它可以在不匹配实际文本的情况下,匹配文本前或后的某些条件。在 ECMAScript 2021 中,正则表达式新增了环视断言,包括正向先行断言 (?=...)
、正向后行断言 (?<=...)
、负向先行断言 (?!)
和负向后行断言 (?<!...)
。
示例代码:
const regex = /(?<=\bhello\s+)\w+/; console.log('hello world'.match(regex)); // ['world']
结论
ECMAScript 2021 带来了许多正则表达式的改进和增强,包括 Unicode 属性转义、具名捕获组、s 修饰符和环视断言。这些新特性可以让我们更方便地进行字符串匹配、替换和校验,提高开发效率。在使用正则表达式时,我们应该熟练掌握这些新特性,并根据实际需求选择合适的语法和修饰符。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/677a804f5c5a933a3416d2e7