正規表現 は、特定の構文ルールに準拠する一連の文字列を説明または一致させるために使用される単一の文字列を指します。多くのテキスト エディターやその他のツールでは、特定のパターンに一致するテキスト コンテンツを取得したり置換したりするために正規表現がよく使用されます。
正規表現の雑な記述がパフォーマンスのボトルネックの主な原因ですが、正規表現の効率を改善できる箇所はまだたくさんあります。 2 つの正規表現が同じテキストに一致するからといって、それらが同等に高速であるとは限りません。
正規表現の効率には多くの要因が影響します。まず、正規表現によって適用されるテキストは多岐にわたり、部分一致は完全一致よりも時間がかかります。各ブラウザの正規表現エンジンには、さまざまな内部最適化機能もあります。
正規表現を効果的に使用するには、その仕組みを理解することが重要です。正規表現処理の基本的な手順は次のとおりです。
ステップ 1: コンパイル
正規表現オブジェクトを (正規表現リテラルまたは RegExp コンストラクターを使用して) 作成した後、ブラウザはテンプレートにエラーがないことを確認し、次に、それを、マッチング作業を実行するネイティブ コード ルーチンに変換します。正規表現を変数に割り当てると、この手順を繰り返す必要がなくなります。
ステップ 2: 開始位置を設定する
正規表現を使用する場合は、まずターゲット文字列内の検索を開始する位置を決定する必要があります。これは文字列の開始位置、または正規表現の lastIndex 属性によって指定されますが、ステップ 4 からここに戻るとき (一致の試行が失敗したため)、この位置は最後に試行された開始位置より後になります。キャラクターの位置。
ブラウザが正規表現エンジンを最適化する方法は、この段階での早期予測を通じて不必要な作業をスキップすることです。たとえば、正規表現が ^ で始まる場合、IE と Chrome は通常、文字列の先頭に一致があるかどうかを判断し、その後の位置の愚かな検索を回避します。別の例は、3 番目の文字が x である文字列を照合することです。賢い方法は、最初に x を見つけてから、開始位置を 2 文字分遡ることです。
ステップ 3: 正規表現の各文字を照合します
正規表現が開始位置を見つけると、ターゲット テキストと正規表現テンプレートを 1 つずつスキャンします。特定の文字が一致しない場合、正規表現はスキャンの前の位置に戻り、正規表現の他の可能なパスを入力しようとします。
ステップ 4: 一致の成功または失敗
文字列の現在位置で完全一致が見つかった場合、正規表現は成功したと宣言されます。正規表現内のすべての可能なパスが試行されても一致が成功しなかった場合、正規表現エンジンはステップ 2 に戻り、文字列内の次の文字から再試行します。文字列内の各文字 (および最後の文字の後の位置) がこのようなプロセスを経て、正常に一致しなかった場合にのみ、正規表現は完全な失敗を宣言します。
このプロセスを念頭に置くと、正規表現のパフォーマンスに影響を与える問題の種類を賢明に特定するのに役立ちます。
元のアドレス: http://www.yiiyaa.net/1231