Обратная ссылка: \1, \2
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Обратная ссылка ссылается на совпадение подстроки предыдущей захватывающей группы и соответствует тому же тексту, что и эта группа. Для именованных захватывающих групп вы можете предпочесть использование синтаксиса именованной обратной ссылки.
Синтаксис
\N
Примечание: N не является литеральным символом.
Параметры
-
N - Положительное целое число, указывающее на номер захватывающей группы.
Описание
Обратная ссылка — это способ сопоставить тот же текст, который был ранее сопоставлен захватывающей группой. Захватывающие группы нумеруются с 1, поэтому на результат первой захватывающей группы можно сослаться с помощью \1, на вторую — с помощью \2, и так далее. \0 — это экранирование символа для символа NUL.
При регистронезависимом сопоставлении обратная ссылка может соответствовать тексту с другим регистром, нежели в исходном тексте.
/(b)\1/i.test("bB"); // true
Обратная ссылка должна ссылаться на существующую захватывающую группу. Если указанный ею номер превышает общее количество захватывающих групп, генерируется синтаксическая ошибка.
/(a)\2/u; // SyntaxError: Invalid regular expression: Invalid escape
В режиме без учета Unicode недействительные обратные ссылки становятся устаревшей восьмеричной escape-последовательностью. Это устаревший синтаксис для веб-совместимости, и вам не следует полагаться на него.
/(a)\2/.test("a\x02"); // true
Если захватывающая группа, на которую ссылаются, не совпала (например, потому что она принадлежит к несовпавшей альтернативе в дизъюнкции), или группа еще не совпала (например, потому что она находится справа от обратной ссылки), обратная ссылка всегда выполняется успешно (как если бы она совпала с пустой строкой).
/(?:a|(b))\1c/.test("ac"); // true
/\1(a)/.test("a"); // true
Примеры
Сопоставление пар кавычек
Следующая функция сопоставляет шаблоны title='xxx' и title="xxx" в строке. Чтобы гарантировать совпадение кавычек, мы используем обратную ссылку, чтобы сослаться на первую кавычку. Доступ ко второй захватывающей группе ([2]) возвращает строку между совпадающими символами кавычек:
function parseTitle(metastring) {
return metastring.match(/title=(["'])(.*?)\1/)[2];
}
parseTitle('title="foo"'); // 'foo'
parseTitle("title='foo' lang='en'"); // 'foo'
parseTitle('title="Named capturing groups\' advantages"'); // "Named capturing groups' advantages"
Поиск повторяющихся слов
Следующая функция находит повторяющиеся слова в строке (которые обычно являются опечатками). Обратите внимание, что она использует экранирование класса символов \w, которое соответствует только английским буквам, но не акцентированным буквам или другим алфавитам. Если вы хотите более универсального сопоставления, возможно, вы захотите разбить строку по пробелам и выполнить итерацию по полученному массиву.
function findDuplicates(text) {
return text.match(/\b(\w+)\s+\1\b/i)?.[1];
}
findDuplicates("foo foo bar"); // 'foo'
findDuplicates("foo bar foo"); // undefined
findDuplicates("Hello hello"); // 'Hello'
findDuplicates("Hello hellos"); // undefined
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | |
backreference |
1 |
12 |
1 |
5 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
Смотрите также
- Руководство по группам и обратным ссылкам
- Регулярные выражения
- Захватывающая группа:
(...) - Именованная захватывающая группа:
(?<name>...) - Именованная обратная ссылка:
\k<name>
© 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/Backreference