5

我知道如果匹配正则表达式两侧的子字符串之一,则 javascript 中的正则表达式 OR (|) 运算符匹配。

我还知道,在 JavaScript 中,逻辑 (||) OR 运算符仅在第一个操作数为假时才检查第二个操作数。

所以我想知道正则表达式(|)(也称为管道)或运算符是否以相同的方式工作,或者它首先匹配两个子字符串然后决定匹配。如果我没记错的话,我认为只有在左手子字符串不匹配时才应该检查第二个右手子字符串以提高性能。

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. 评估替代方案以获得匹配器 m1。
  2. 评估析取以获得匹配器 m2。
  3. 返回一个内部 Matcher 闭包,它接受两个参数,一个 State x 和一个 Continuation c,并执行以下操作:
    一种。调用 m1(x, c) 并令 r 为其结果。
    湾。如果 r 不是失败,则返回 r。
    C。调用 m2(x, c) 并返回其结果。

15.10.2.3 第 3b 行是规定短路的地方。

于 2012-11-26T07:05:50.867 回答