Дизъюнкция: |
Базовая линия Широко доступна
Эта функция хорошо зарекомендовала себя и работает на множестве устройств и версий браузеров. Она доступна во всех браузерах с июля 2015 года.
Дизъюнкция задает несколько альтернатив. Любая альтернатива, соответствующая входным данным, приводит к полному совпадению дизъюнкции.
Синтаксис
alternative1|alternative2 alternative1|alternative2|alternative3|…
Параметры
-
alternativeN - Один альтернативный шаблон, состоящий из последовательности атомов и утверждений. Успешное совпадение одной альтернативы приводит к полному совпадению дизъюнкции.
Описание
Оператор регулярных выражений | разделяет две или более альтернативы. Шаблон сначала пытается сопоставить первую альтернативу; если это не удается, он пытается сопоставить вторую и так далее. Например, следующее сопоставляет "a" вместо "ab", потому что первая альтернатива уже успешно совпадает:
/a|ab/.exec("abc"); // ['a']
Оператор | имеет наименьший приоритет в регулярном выражении. Если вы хотите использовать дизъюнкцию как часть большего шаблона, вам нужно сгруппировать ее.
Когда сгруппированная дизъюнкция имеет после себя несколько выражений, сопоставление начинается с выбора первой альтернативы и попытки сопоставить остальную часть регулярного выражения. Если остальная часть регулярного выражения не удается сопоставить, вместо этого сопоставитель пытается использовать следующую альтернативу. Например:
/(?:(a)|(ab))(?:(c)|(bc))/.exec("abc"); // ['abc', 'a', undefined, undefined, 'bc']
// Not ['abc', undefined, 'ab', 'c', undefined]
Это связано с тем, что, выбрав a в первой альтернативе, можно выбрать bc во второй альтернативе и добиться успешного совпадения. Этот процесс называется откатом (backtracking), потому что сопоставитель сначала выходит за пределы дизъюнкции, а затем возвращается к ней, когда последующее сопоставление не удается.
Также обратите внимание, что любые захватывающие скобки внутри несопоставленной альтернативы производят undefined в результирующем массиве.
Альтернатива может быть пустой, в этом случае она соответствует пустой строке (другими словами, всегда соответствует).
Альтернативы всегда пытаются сопоставить слева направо, независимо от направления сопоставления (которое обратное в lookbehind).
Примеры
Сопоставление расширений файлов
Следующий пример сопоставляет расширения файлов, используя тот же код, что и в статье assertion границы ввода:
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
Спецификации
Совместимость с браузерами
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
disjunction |
1 |
12 |
1 |
5 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
- Руководство по классам символов
- Регулярные выражения
- Квантификатор:
*,+,?,{n},{n,},{n,m} - Класс символов:
[...],[^...]
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Disjunction