Mozilla は Chromium と共通の正規表現エンジンの使用に切り替えました

Firefox で使用される SpiderMonkey JavaScript エンジン 転送された 現在のコードに基づいて更新された正規表現の実装を使用する 不正規表現 Chromium プロジェクトに基づくブラウザで使用される V8 JavaScript エンジンからのものです。 RegExp の新しい実装は、78 月 30 日に予定されている Firefox XNUMX で提供され、正規表現に関連して不足しているすべての ECMAScript 要素がブラウザに提供されます。

SpiderMonkey の RegExp エンジンは別個のコンポーネントとして設計されているため、比較的独立しており、コード ベースに大幅な変更を加えることなく置き換えに適していることに注意してください。 モジュール化により、2014 年に、もともと Firefox で使用されていた YARR RegExp エンジンを、V8 からの Irregexp エンジンのフォークに置き換えることが可能になりました。 Irregexp は V8 API、ガベージ コレクターに関連付けられており、V8 固有の文字列表現とオブジェクト モデルを使用します。 2014 年に SpiderMonkey の内部 API に適応する過程で、Irregexp エンジンが部分的に書き直され、可能な場合には '\u' フラグなどの新たな変更が加えられました。 転送された Mozilla が管理するフォークにコピーします。

残念ながら、同期フォークの維持は難しく、リソースを大量に消費します。 ECMAScript 2018 標準の正規表現に関連する新機能の登場に伴い、Mozilla 開発者は、Irregexp からの変更を簡単に移行する方法を考えました。 解決策として、SpiderMonkey でほぼ変更されていない Irregexp エンジンを使用できるようにするラッピングの概念が提案されました (変更は「#include」ブロックの自動置換のみに限定されています)。

Mozilla は Chromium と共通の正規表現エンジンの使用に切り替えました

このフレームワークは、Irregexp に必要な V8 固有の機能を提供します。これには、メモリ管理およびコード生成機能のほか、メモリ管理エンジン、コード ジェネレータ、SpiderMonkey 構造を使用して実装されるネイティブ データ構造も含まれます。

RegExp エンジンを更新すると、Firefox で名前付きキャプチャ、Unicode 文字クラスのエスケープ、dotAll フラグ、Lookbehind モードなどの機能がサポートされるようになります。

  • 名前付きグループ 正規表現によって一致した文字列の一部を、一致のシリアル番号の代わりに特定の名前に関連付けることができます (たとえば、「/(\d{4})-(\d{2})-(\d{ 2})/”、”/( ? \d{4})-(? \d{2})-(? \d{2})/" を実行し、result[1] ではなく result.groups.year) を通じて年にアクセスします。
  • クラスのエスケープ Unicode 文字は、構造 \p{...} と \P{...} を追加します。たとえば、\p{Number} は、数字 (①のような文字を含む)、\p{Alphabetic} - 文字 (含む) を表すすべての可能な文字を定義します。 hieroglyphs )、\p{Math} — 数学記号など。
  • Флаг ドットオール 「.」マスクを起動します。 改行文字も含みます。
  • 政権 後ろを見て 正規表現内で、あるパターンが別のパターンに先行するかどうかを判断できます (たとえば、ドル記号をキャプチャせずにドル金額を照合するなど)。

このプロジェクトは、V8 開発者の参加を得て実行されました。開発者たちは、V8 への Irregexp の依存性を減らすために取り組み、SpiderMonkey を使用して実装できない一部の機能を無効な「#ifdef」ブロックに移動しました。 この協力は相互に有益であることが判明しました。 Mozilla 開発者は、一部を削除する変更を Irregexp に提出しました。 不整合 JavaScript 標準の要件を満たしており、 改善する コードの品質。 また、Firefox のファジング テスト中に、クラッシュを引き起こした Irregexp コード内のこれまで気付かなかったエラーが特定され、排除されました。

出所: オープンネット.ru

コメントを追加します