新的JavaScript功能将改变编写正则表达式的方式
如果你曾在JavaScript中进行处理过其他任何复杂的文本处理和操作过程,那么你将会欣赏ES2018中引入的新功能。
JavaScript的第9版标准版本极力提高JavaScript的文本处理能力。
大多数编程语言都支持正则表达式,使用正则表达式最好的理由:它们是用于处理文本的极其强大的工具,需要几十行代码的文本处理任务通常可以通过一行正则表达式代码来完成。虽然大多数语言中的内置函数通常足以对字符串执行搜索和替换操作,但更复杂的操作(例如验证文本输入)通常需要使用正则表达式。
自1999年推出ECMAScript标准第三版以来,正则表达式已成为JavaScript语言的一部分.ECMAScript 2018(简称ES2018)是该标准的第九版,通过引入进一步提高了JavaScript的文本处理能力。
ES2018四个新功能:
- Lookbehind断言
- 命名捕获组
- Unicode属性转义
- s (dotAll) 标志
Lookbehind断言
能够根据后面或之前的内容匹配一系列字符,使你可以丢弃可能不需要的匹配。在需要处理大字符串并且意外匹配的可能性很高时,这一点尤为重要。大多数正则表达式都为此提供了lookbehind和lookahead断言。
ES2018通过为JavaScript提供lookbehind断言来补充前瞻性断言。
(?<=...)一个lookbehind断言表示,只有当它前面有另一个模式时,才能匹配模式。
命名捕获组
你可以通过将字符封装在括号中来对正则表达式的一部分进行分组,这允许你将交替限制为模式的一部分或在整个组中应用量词。此外,可以通过括号提取匹配值以进行进一步处理。
Unicode属性转义
在ES2018中,\p{...}当设置u标志时,Unicode属性转义(表示为)在正则表达式中可用。
在ES2018中,\p{...}当设置u标志时,Unicode属性转义(表示为)在正则表达式中可用。
s (dotAll) 标志
默认情况下,正则表达式模式中的dot()元字符匹配除换行符之外的任何字符,包括换行(\n)和回车符(\r)。
尽管有这个缺点,JavaScript开发人员仍然可以通过使用两个相反的速记字符类来匹配所有字符,例如[\w\W],它指示正则表达式引擎匹配字符字符(\w)或非字符字符(\W)的字符。
ES2018旨在通过引入s(dotAll)标志来解决这个问题。设置此标志后,它会更改点(.)元字符的行为以匹配换行符。
通过使正则表达式更有用,ES2018继续了以前版本ECMAScript的工作。
在构建复杂模式时,使用正则表达式测试程序通常很有帮助,一个好的测试人员提供了一个接口来测试字符串的正则表达式并显示引擎所采取的每一步,这在尝试理解其他人编写的模式时尤其有用。它还可以检测正则表达式模式中可能出现的语法错误。