析取:|
**析取** 指定多个备选方案。任何与输入匹配的备选方案都会导致整个析取匹配。
语法
正则表达式
alternative1|alternative2
alternative1|alternative2|alternative3|…
参数
alternativeN
-
一个备选模式,由一系列原子和断言组成。成功匹配一个备选方案会导致整个析取匹配。
描述
|
正则表达式运算符将两个或多个备选方案分隔开。该模式首先尝试匹配第一个备选方案;如果失败,它将尝试匹配第二个,依此类推。例如,以下匹配 "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 语言规范 # prod-Disjunction |
浏览器兼容性
BCD 表格仅在浏览器中加载