5

正規表現の両側の部分文字列のいずれかが一致する場合、javascript の正規表現 OR (|) 演算子が一致することを知っています。

JavaScript では、論理 (||) OR 演算子は、最初のオペランドが false の場合にのみ 2 番目のオペランドをチェックすることも知っています。

したがって、正規表現 (|) (パイプとも呼ばれます) OR 演算子が同じように機能するかどうか、または最初に両方の部分文字列に一致してから一致を決定するかどうかを知りたいです。私が間違っていなければ、パフォーマンスのために左側の部分文字列が一致しない場合にのみ、2番目の右側の部分文字列をチェックする必要があると思います。

4

1 に答える 1

8

はい、|正規表現では短絡です。

例えば、

"The | is short circuiting, NOT!".match(/The \| is short circuiting(?:|, NOT!)/)

生産する

["The | is short circuiting"]

その間

"The | is not short circuiting, NOT!".match(/The \| is not short circuiting(?:, NOT!|)/)

生産する

["The | is not short circuiting, NOT!"]

言語仕様によると

生成Disjunction :: Alternative | Disjunctionは次のように評価されます。

  1. Alternative を評価して Matcher m1 を取得します。
  2. Disjunction を評価して Matcher m2 を取得します。
  3. State x と Continuation c の 2 つの引数を取り、以下を実行する内部 Matcher クロージャを返します。
    を。m1(x, c) を呼び出し、r をその結果とします。
    b. r が失敗でない場合は、r を返します。
    c. m2(x, c) を呼び出し、その結果を返します。

15.10.2.3 行 3b は、短絡が指定されている場所です。

于 2012-11-26T07:05:50.867 に答える