正则表达式是前端开发中经常用到的工具,它可以轻松地处理文本内容。在 ECMAScript 2019(也叫 ES10)中,正则表达式中加入了一些新的特性,让我们更好地使用它们。本文将介绍 ES10 中的正则表达式匹配新特性,包括正则标志,ASCII 字符类,Named Capturing Groups 和 Lookbehind Assertions。
正则标志
在 ES6 中就有 u 标志用于支持 Unicode,ES10 中新增了 s 标志用于支持换行符。在正则表达式中使用 s 标志,可以让 . 匹配任意字符,包括换行符 \n。
示例代码:
-- -------------------- ---- ------- ----- ---- - --------------- -- --------------- -- - --- ---- ------ ------- ----- --- - ----------- ----- ------- - ------------------ -- ----- -- - ---- -------- - ------ ----- --- - ----------- ----- ------- - ------------------ -- ------------展开代码
ASCII 字符类
如果你写过正则表达式,你应该知道 \w 表示 Unicode 单词字符。但是在大多数情况下,我们可能只需要匹配 ASCII 单词字符。ES10 中新增了 \p{ASCII} 或 \p{ASCII_Hex_Digit},可以匹配符合 ASCII 标准的字符。
示例代码:
// 匹配一个 ASCII 的十六进制数字 const re = /^[\p{ASCII_Hex_Digit}]{2}$/u; const result = re.test('5A'); // true
Named Capturing Groups
在 ES10 中,可以使用命名捕获组来更好地管理正则表达式的匹配结果。我们可以给捕获组命名并在后续的匹配代码中通过组名来引用它们。
示例代码:
const re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const match = re.exec('2021-07-01'); console.log(match.groups.year); // 2021 console.log(match.groups.month); // 07 console.log(match.groups.day); // 01
Lookbehind Assertions
回顾一下正则表达式中的 lookahead 符号 (?=) 和 (?!),它们可以匹配一个字符后面的另一个字符。ES10 中引入了 lookbehind 断言,在匹配一个字符前可以匹配另一个字符,类似于向前查看。ES10 中支持两种形式的 lookbehind 断言:后顾逆序断言和后顾零宽负预测断言。
示例代码:
// 后顾逆序断言 const re1 = /(?<=a)x/; console.log(re1.test('ax')); // true // 后顾零宽负预测断言 const re2 = /(?<!a)x/; console.log(re2.test('ax')); // false console.log(re2.test('bx')); // true
以上是 ES10 中正则表达式匹配的几个新特性。我们可以通过这些新特性更轻松地处理各种文本内容。希望本文能够帮助您更好地理解这些特性,让您可以更好地使用正则表达式。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/678730c04083a4caee08ae52