在 ES10 中,正则表达式得到了很大的扩展,这使得我们能够更加灵活的运用正则表达式来进行字符串的处理。在本文中,我们将从以下几个方面来介绍 ES10 的正则表达式扩展。
dotAll 标志符
在 ES10 中,我们可以通过 s
标志符来启用 dotAll 模式。在 dotAll 模式下,.
将匹配任意单个字符,包括多行模式下的换行符。
示例代码:
const string = 'hello\nworld'; const regex = /./; regex.test(string); // false const dotallRegex = /./s; dotallRegex.test(string); // true
lookbehind 的正确实现
在 ES9 中, JavaScript 引入了 lookbehind
,但是其实现十分有限,并且存在一些限制。在 ES10 中,lookbehind
得到了正确的实现,并且支持向前以任意宽度进行匹配。
示例代码:
const string = 'hello world'; // 匹配 "llo" 后面跟着空格的 "l" const lookBehindRegex = /(?<=llo\s)./; console.log(string.match(lookBehindRegex)); // [' ']
named capture groups
在 ES10 中,我们可以使用命名捕获组,它使得我们在匹配的时候能够给捕获的结果取一个易于理解的名称,从而使得代码更加的可读性。
示例代码:
const string = '2020-09-23'; // 匹配年月日,并且将匹配结果命名为 year、month 和 day const regex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const match = string.match(regex); console.log(match.groups.year); // 2020 console.log(match.groups.month); // 09 console.log(match.groups.day); // 23
Unicode 转义符
在 ES10 中,我们可以使用 Unicode 转义符 \u{}
来匹配大于 BMP(Basic Multilingual Plane,基本多文种平面)的 Unicode 字符。在这之前,我们只能使用类似 \uD835\uDFD9
这样的语法来表示这些字符。
示例代码:
const string = '\uD835\uDFD9 is 🦊'; // 使用 Unicode 转义符来匹配 math 定义域字符 const regex = /\u{1D54D}/u; console.log(string.match(regex)); // ['𝕍'] // 匹配 Unicode 表情符号 const emojiRegex = /\p{Emoji}/gu; console.log(string.match(emojiRegex)); // ['🦊']
延伸阅读
如果你想深入学习正则表达式,可以阅读以下几篇文章:
总结
在本文中,我们学习了 ES10 中对正则表达式的扩展。这些扩展让正则表达式更加灵活和可读性更好,这为我们处理字符串提供了更多的工具和方法。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6530b3d77d4982a6eb243ad6