析取:|
一个或运算指定了多个备选项。任何一个备选项匹配输入都会导致整个或运算匹配成功。
语法
正则表达式
alternative1|alternative2
alternative1|alternative2|alternative3|…
参数
描述
正则表达式运算符 | 分隔两个或多个备选项。模式首先尝试匹配第一个备选项;如果失败,则尝试匹配第二个,以此类推。例如,以下代码匹配 "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 |
浏览器兼容性
加载中…