Перейти к основному содержимому
Модуль 4 · Урок 4 из 416/32 в курсе~12 min
Уроки модуля (4/4)

Именованные группы и обратные ссылки

Когда количество групп растет, помните, что $2 — это «месяц», а $5 «Год» становится хрупким. Синтаксис (?<name>...) позволяет вам назовите группу: вы получаете доступ к ней по имени через groups.name (и в замены как $<name>).

Code
Pattern: (?<anno>\d{4})-(?<mese>\d{2})-(?<giorno>\d{2})
Sample:  2024-03-15
Gruppi:
  anno    = "2024"
  mese    = "03"
  giorno  = "15"

Редактор отображает именованные группы рядом с совпадением.

обратная ссылка

обратная ссылка позволяет ссылаться внутри того же шаблона, к предыдущему захвату. Синтаксис:

  • \1, \2, … -- нумерованная ссылка (на группу 1, 2, …).
  • \k<name> -- именованная ссылка.
Code
Pattern: \b(\w+)\s+\1\b
Sample:  un test un test il il gatto
                                ^^^^^

Соответствует последовательным повторяющимся словам: (\w+) захватывает слово, затем \s+\1 требует пробела и того же того же слова.

Самодокументируемый код и именованные обратные ссылки.

Именованные группы улучшают читаемость кода JavaScript: вместо ссылки на match[1] вы получаете доступ к match.groups.name. Внутри самого шаблона ссылка на них осуществляется с помощью синтаксиса \\k<name>.

Попробуйте это

Упражнение#regex.m4.l4.e1
Попыток: 0Загрузка…

Найдите каждую дату в формате ГГГГ-ММ-ДД, назвав группы «anno», «mese», «giorno».

Загрузка редактора…
Показать подсказку

Синтаксис: (?&lt;имя&gt;шаблон). Соответствие показывает группы под записью «named».

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#regex.m4.l4.e2
Попыток: 0Загрузка…

Найдите последовательные повторяющиеся слова (например, «il il», «casa casa»). Используйте группу для первого и обратную ссылку `\\1` для второго.

Загрузка редактора…
Показать подсказку

\\b(\\w+)\\s+\\1\\b: первое слово — (\\w+), затем пробел, затем ТО ЖЕ слово \\1.

Решение доступно после 3 попыток

Дополнительная задача

Упражнение#regex.m4.l4.e3
Попыток: 0Загрузка…

Find HTML/XML tag pairs (e.g. `<b>text</b>` or `<i>text</i>`) ensuring that the closing tag matches the opening tag using a named backreference.

Загрузка редактора…
Показать подсказку

Назначьте имя (?<tag>\\w+) и закройте его с помощью \\k<tag>.

Решение доступно после 3 попыток