ECMAScript 2021 (ES12): New regex properties 一览

阅读时长 4 分钟读完

随着前端语言的不断发展,JavaScript 也在不断地更新迭代。其中,ES12 推出了一些新的正则表达式属性,让开发者在处理字符串时更加便捷。在本文中,我们将详细了解 ES12 中新增的正则表达式属性,并且结合示例代码进行介绍。

/s 修饰符

在 ES12 中,正则表达式新增了 /s 修饰符。该修饰符表示匹配任意单个字符(包括换行符)。如果不使用 /s 修饰符,由于默认是匹配任意单个字符,因此无法匹配到换行符。

举个例子:

在上面的例子中,由于默认情况下无法匹配到换行符,因此第一个 console.log 输出 null,而使用 /s 修饰符时,第二个 console.log 输出 ["hello\nworld"]。

具名捕获分组

在 ES12 中,正则表达式新增了具名捕获分组。在以往的版本中,我们使用 /(pattern)/ 来进行捕获分组。而在 ES12 版本中,我们可以使用 (?<name>pattern) 的形式进行具名捕获分组。

举个例子:

以上代码中,我们使用了具名捕获分组。其中, (?<year>\d{4}) 表示捕获四个数字作为年份,名字为 year。同理,后面的两个组也进行了一样的操作。match.groups 包含了每个具名捕获分组的结果。

这样的语法糖可以让开发者更加方便地 debug 和全面理解代码逻辑。

前后断言

在 ES12 中,正则表达式新增了前后断言。前后断言能够在匹配某些字符串时,考虑到该字符串前面或者后面的内容,从而进行更加精确的匹配。在前后断言中,我们可以使用 (?<=...) 和 (?<!...) 来表示正向和负向前断言,使用 (?=...) 和 (?!...) 来表示正向和负向后断言。

举个例子:

在上面的代码中,我们先定义了两个字符串 str1 和 str2,并且定义了两个正则表达式 regex1 和 regex2。在 regex1 中,我们使用了前后断言 ?<=Hello, 和 \b\w+\b。意思是匹配以 Hello, 开头的单词。在匹配结果时,仅匹配 "JavaScript"。

在 regex2 中,我们引入了一个负向前断言 (?<!= ),匹配以非空格为开头的单词。在匹配结果时,我们返回了匹配到的所有单词。

RegExp.escape()

在 ES12 中,正则表达式新增了一个静态方法 RegExp.escape()。该方法能够将字符串转义,使得这个字符串可以直接当做字符串字面量使用。在以前的版本中,我们需要自己编写转义的逻辑,而在 ES12 版本中,我们可以直接使用该方法,极大的方便了开发者。

例如,在以前的版本中,我们需要将 . 替换为 .。而在 ES12 版本中,我们可以直接使用 RegExp.escape('.')。

举个例子:

在上面的代码中,我们使用了 RegExp.escape() 将 javascript.programming 转义为 javascript.programming,进而生成了一个对应的正则表达式。在匹配时,可以得到 ["javascript.programming"]。

ES12 正则表达式总结

在 ES12 版本中,正则表达式新增了一些很实用的属性,这些新增加的属性可以方便开发人员更加便捷地处理字符串。在本文中,我们介绍了 /s 修饰符、具名捕获分组、前后断言和 RegExp.escape() 四个属性。这些属性优化了开发体验,进而提升了开发效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65234d6395b1f8cacdab8ee0

纠错
反馈