Модификатор: (?ims-ims:...)
Базовая линия Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
Модификатор переопределяет настройки флагов в определенной части регулярного выражения. Он может использоваться для включения или отключения флагов, изменяющих значения определенных элементов синтаксиса регулярных выражений. Этими флагами являются i, m и s.
Синтаксис
(?flags1:pattern) (?flags1-flags2:pattern)
Примечание: В JavaScript существует только "ограниченная" форма модификатора, где шаблон помещается внутрь группы модификатора. Большинство других языков, поддерживающих модификаторы, имеют "неограниченную" форму, где модификатор применяется до конца ближайшей содержащей группы.
Параметры
-
flags1Необязательно - Строка флагов для включения. Может содержать любую комбинацию
i,mиs. -
flags2Необязательно - Строка флагов для отключения. Может содержать любую комбинацию
i,mиs, но не должна содержать никаких флагов, включенных вflags1. -
pattern - Шаблон, состоящий из всего, что вы можете использовать в литерале регулярного выражения, включая дизъюнкцию.
Описание
Некоторые флаги изменяют значения элементов синтаксиса регулярных выражений:
- Флаг
iделает регулярное выражение нечувствительным к регистру, делая все буквенные символы и классы символов неявно строчными. - Флаг
mизменяет поведение утверждений границ ввода^и$, чтобы они соответствовали началу и концу каждой строки, в дополнение к началу и концу входной строки. - Флаг
sизменяет поведение шаблонного символа., чтобы он соответствовал любому символу, включая терминаторы строк.
Иногда вы можете захотеть, чтобы эти изменения вступали в силу только в определенной части шаблона регулярного выражения. Вы можете сделать это, заключив эту часть в модификатор. Например:
/(?i:Hello) world/;
В этом регулярном выражении флаг i включен только для части Hello шаблона. Часть world чувствительна к регистру. Поэтому она соответствует Hello world, hello world и HELLO world, но не HELLO WORLD. Следующий пример эквивалентен, путем глобального включения флага i, а затем его отключения для части world:
/Hello (?-i:world)/i;
Параметры flags1 и flags2 могут содержать любую комбинацию i, m и s. Однако флаги должны быть уникальны между flags1 и flags2 — вы не можете включить или отключить флаг дважды, или включить флаг, а затем немедленно отключить его.
Параметры flags1 и flags2 являются необязательными, но хотя бы один из них должен быть непустым. (?flags1-:pattern) — это модификатор, который только включает флаги (эквивалентно (?flags1:pattern)). (?-flags2:pattern) — это модификатор, который только отключает флаги. (?:pattern) — это просто незахватывающая группа, а (?-:pattern) — синтаксическая ошибка.
Другие флаги не имеют смысла в модификаторе и поэтому являются синтаксическими ошибками, если они включены:
- Флаги
gиyопределяют, как ведут себя множественные вызовыexec()и влияют на поведение всего регулярного выражения. - Флаг
dвключает дополнительную информацию в результатexec()и влияет на поведение всего регулярного выражения. - Флаги
uиvизменяют поведение движка регулярных выражений таким образом, что это слишком сложно для локального изменения. Они также оказывают глобальное влияние на регулярное выражение, например, как продвигаетсяlastIndex.
Примеры
Сопоставление многострочного формата только в начале строки
Следующее регулярное выражение определяет формат для многострочной строки. Первый ^ представляет начало всей входной строки, находясь внутри модификатора (?-m:), в то время как все остальные символы ^ представляют начало строки:
const pattern = /(?-m:^)---\n^title:.*^slug:.*^---/ms;
const input = `---
title: "Modifier: (?ims-ims:...)"
slug: Web/JavaScript/Reference/Regular_expressions/Modifier
---`;
pattern.test(input); // true
// Extra line break at the start of string
const input2 = `\n${input}`;
pattern.test(input2); // false
Сопоставление определенных слов без учета регистра
Представьте, что вы ищете все объявления переменных с именем foo или bar (поскольку это плохие имена). Слово может встречаться в любом регистре, но вы знаете, что ключевое слово всегда пишется в нижнем регистре, поэтому вы можете сделать следующее:
const pattern = /(?:var|let|const) (?i:foo|bar)\b/;
pattern.test("let foo;"); // true
pattern.test("const BAR = 1;"); // true
pattern.test("Let foo be a number"); // false
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | |
modifier |
125 |
125 |
132 |
111 |
26 |
125 |
132 |
83 |
26 |
27.0 |
125 |
26 |
1.2.3 |
1.44 |
23.0.0 |
См. также
© 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/Modifier