天天看點

[譯] 即将到來的正規表達式新特性

<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>

繼續閱讀