V8正規表現のUnicode文字プロパティ

JavaScriptの正規表現は、PCREに徐々に追いついてきています。



最近言及された後読み機能は、--es_stagingフラグステージに移動しました



V8開発者は、Unicodeプロパティを正規表現に追加し始めました (この特性の一般的な説明仕様を参照)。



後読みとキャラクタープロパティのプロモーションには2つの違いがあります:最初のオプションは2番目と比較してかなり新しい構文を導入しますが、2番目はプロセス全体の動作をあまり変化させません(言及した2つのリンクを使用してV8ソースの変更によって影響を受けるファイルの数を比較します)。 実際、Unicodeプロパティは便利な略語であり、コードポイントの異なるグループの同義語であるため、システムに統合するときに最小限のトリックが期待できます。



もちろん、両方のオプションは製品での使用は推奨されていません(Google Chromeを除き、ブラウザーのどこにも実装されていません。Node.jsは、いずれにしてもフラグの下にある対応するバージョンのV8に切り替えています)。



しかし、個人的なニーズ(テキスト処理ユーティリティなど)については、それらは非常に適用可能であるように思えます。 おそらく、V8開発者コードは、実験的なものであっても、npmjsまたはGitHubのさまざまなライブラリよりも大きなリスクなしで信頼できる場合があります。



Google Chromeでは、現在安定したv50でも、フラグの下でテストを実行できます。



chrome.exe --js-flags="--harmony_regexp_property"







Node.jsでは、v6.0でそのような機会が現れます( すでに最初の RCがあります):



node --harmony_regexp_property test.js







Google Chrome v50およびNode.js v6.0では、V8の現在のバージョン( '5.0.71.32')には実装の最初の部分(2016年2月10日からの最初のコミット )のみが含まれます。しかし、これは大きな飛躍であり、いわゆる。 文字の一般的なカテゴリ( 説明仕様 )。 カテゴリーを記号で埋める方法はこちらをご覧ください



機能をテストするためのサンプルスクリプト



最初に、オブジェクトが作成されます。キーはカテゴリの名前で、値はこのカテゴリの3文字です。 カテゴリが結合されている(つまり、他のいくつかのカテゴリを単純に結合している)場合、値は対応するカテゴリの行を結合する関数になります。 少なくとも何らかの形で明確な表示に役立つものは、シンボル自体で紹介しました。 表示されないものまたはマージされるもの(制御文字、発音区別符号など)は、エスケープシーケンスを使用して入力されます。



次に、スクリプトはオブジェクトの要素を反復処理し、キー(カテゴリ名)から正規表現を作成し、それを使用して値(例付きの文字列)をテストします。 結果はコンソールに表示されます。 カテゴリが実装されていない場合、エラーメッセージが表示されます(Google Chrome v50とNode.js v6.0の言及されたバージョンでは、組み合わせたカテゴリは\ p {LC}は実装されていませんが、通常のメンバーを組み合わせて手動で実装するのは簡単です式; V8以降のバージョンでは、この省略は既に修正されています)。 検索が失敗した場合、nullが出力されます(スクリプトでは、これはカテゴリ\ p {Cn}でのみ発生します。これは、原則として単一の文字が割り当てられておらず、比較の例を与えることができないためです)。



Node.js 6.0.0-rc.2のスクリプト出力の先頭(V8 5.0.71.32-Unicode文字プロパティの実装の初期段階):







Google Chrome Canaryスクリプト52.0.2710.0の出力の先頭(V8 5.2.26は現在の実装段階です。処理の違いに注意してください\ p {LC}):







実装済みリストからわかるように、Google Chrome Canaryでは、スクリプト、プロパティ名の緩やかな一致、文字クラスのバイナリ\列挙プロパティなど、はるかに多くの機能を既にテストできます。 すぐに、これらの要素はNodeに到達します。



幸せなテストと成功した注意深い使用。



PS。 Mathias BynensによるJavaScript正規表現でのUnicodeプロパティエスケープ -将来の仕様の簡単な説明と例と便利なリンク。



All Articles