Spec-Zone.ru › JavaScript

Дизъюнкция: |

Базовая линия Широко доступна

Эта функция хорошо зарекомендовала себя и работает на множестве устройств и версий браузеров. Она доступна во всех браузерах с июля 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

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# prod-Disjunction

Совместимость с браузерами

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API