天天看点

[译] 即将到来的正则表达式新特性

<b>本文讲的是[译] 即将到来的正则表达式新特性,</b>

<b></b>

ES2015 给 JavaScript 语言引入了许多新特性,其中包括正则表达式语法的一些重大改进,新增了 Unicode 编码 (<code>/u</code>) 和粘滞位 (<code>/y</code>)两个修饰符。而在那之后,发展也并未停止。经过与 TC39(ECMAScript 标准委员会)的其他成员的紧密合作,V8 团队提议并共同设计了让正则表达式更强大的几个新特性。

本文给您预览一下这个令人兴奋的未来。如果您愿意跟着体验这些即将到来的示例,可以在<code>chrome://flags/#enable-javascript-harmony</code> 页面中开启实验性 JavaScript 功能。

正则表达式可以包含所谓的捕获(或捕获组),它可以捕获一部分匹配的文本。到目前为止,开发者只能通过索引来引用这些捕获,这取决于其在正则匹配中的位置。

但正则表达式已经因难于读、写和维护而臭名昭著,并且数字引用会使事情进一步复杂化。例如,在一个更长的表达式中判断一个独特捕获的索引是很困难的事:

更糟糕的是,更改一个表达式可能会潜在地转变所有已存在的捕获的索引:

命名捕获是一个即将到来的特性,它允许开发者给捕获组分配名称来帮助尽可能地解决这些问题。语法类似于 Perl、Java、.Net 和 Ruby:

命名捕获组也可以被命名的反向引用来引用,并传入 <code>String.prototype.replace</code>:

默认情况下,元字符 <code>.</code> 在正则表达式中匹配除了换行符以外的任何字符:

一个提案引入了 dotAll 模式,通过 <code>/s</code> 修饰符来开启。在 dotAll 模式中,<code>.</code> 也可以匹配换行符。

正则表达式语法已经包含了特定字符类的简写。<code>\d</code> 代表数字并且只能是 <code>[0-9]</code>;<code>\w</code> 是单词字符的简写,或者写成 <code>[A-Za-z0-9_]</code>。

自从 ES2015 引入了 Unicode,突然间大量的字符可以被认为是数字,例如圈一:①;或者被认为是字符的,例如中文字符:雪。

它们都不会被 <code>\d</code> 或 <code>\w</code> 匹配。而改变这些简写的含义将会破坏已经存在的正则表达式模式。

排除型字符可以使用 <code>\P</code> 匹配。

统一码联盟还定义了许多方式来分类码位,例如数学符号和日语平假名字符:

“后行断言”这个名字已经很好地描述了它的涵义。它提供一个方式来限制一个正则,只有后行组匹配通过之后才继续匹配。它提供匹配和非匹配两种选择:

希望您能像我们一样为这些新的正则表达式特性而感到兴奋!

<b>原文发布时间为:2017年7月14日</b>

<b>本文来自云栖社区合作伙伴掘金,了解相关信息可以关注掘金网站。</b>

继续阅读