析取:|

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

一个或运算指定了多个备选项。任何一个备选项匹配输入都会导致整个或运算匹配成功。

语法

正则表达式
alternative1|alternative2
alternative1|alternative2|alternative3|…

参数

备选项N

一个备选模式,由一系列原子和断言组成。成功匹配其中一个备选项会导致整个或运算匹配成功。

描述

正则表达式运算符 | 分隔两个或多个备选项。模式首先尝试匹配第一个备选项;如果失败,则尝试匹配第二个,以此类推。例如,以下代码匹配 "a" 而不是 "ab",因为第一个备选项已经成功匹配:

js
/a|ab/.exec("abc"); // ['a']

| 运算符在正则表达式中具有最低的优先级。如果你想将一个或运算作为更大模式的一部分,你必须将其分组

当一个分组的或运算后面还有更多表达式时,匹配过程首先选择第一个备选项并尝试匹配正则表达式的其余部分。如果正则表达式的其余部分匹配失败,匹配器会尝试下一个备选项。例如:

js
/(?:(a)|(ab))(?:(c)|(bc))/.exec("abc"); // ['abc', 'a', undefined, undefined, 'bc']
// Not ['abc', undefined, 'ab', 'c', undefined]

这是因为通过在第一个备选项中选择 a,可以在第二个备选项中选择 bc 并导致成功匹配。这个过程称为回溯,因为匹配器首先超越或运算,然后在后续匹配失败时再回到它。

另请注意,未匹配的备选项内部的任何捕获括号在结果数组中会生成 undefined

一个备选项可以是空的,在这种情况下它匹配空字符串(换句话说,总是匹配)。

备选项总是从左到右尝试,无论匹配方向如何(在后行断言中方向相反)。

示例

匹配文件扩展名

以下示例使用与输入边界断言文章相同的代码来匹配文件扩展名:

js
function isImage(filename) {
  return /\.(?:png|jpe?g|webp|avif|gif)$/i.test(filename);
}

isImage("image.png"); // true
isImage("image.jpg"); // true
isImage("image.pdf"); // false

规范

规范
ECMAScript® 2026 语言规范
# prod-Disjunction

浏览器兼容性

另见