Page 282 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 282
удовлетворяют этому шаблону). Таким образом, мы хотим распознать PJJP, GOOG
и АВВА. Вот где в игру вступают обратные ссылки. Каждой группе (включающей
подгруппы) в регулярном выражении присваивается номер, слева направо, начиная
с 1 . Вы можете обратиться к этой группе в регулярном выражении, используя об
ратную косую черту, после которой указан ее номер. Другими словами, \ 1 означает
"соответствие первой группы". Непонятно? Давайте рассмотрим пример.
w
const promo "Opening for УААХ is the dynamic GOOG ! At the Ьох office no ! " ;
const bands = promo . m atch ( / ( ? : [A-Z ] ) ( ? : [A-Z ) ) \ 2 \ 1 / g ) ;
Читая слева направо, мы видим, что есть две группы, а затем \ 2 \ 1 . Так, если пер
вая группа соответствует х и вторая группа соответствует А, то \2 должно соответ
ствовать А и \ 1 должно соответствовать Х.
Если это кажется вам замечательным, но не очень полезным, вы не одиноки.
Единственный случай, когда я полагаю, что обратные ссылки полезны (кроме случа
ев решения головоломок), - это распознавание кавычек.
В HTML вы можете использовать одиночные или двойные кавычки для указания
значений атрибутов. Это можно сделать так.
/ ! здесь мы используем обратные апострофы, поскольку одиночные
/ / и двойные кавычки применяются в коде :
const html = ' < img alt= ' A " s imple " example . ' > ' +
' < img alt="Don ' t abuse it ! " > ' ;
(
(
.
const matches = html m atch / <img alt= ? : [ ' " ] ) . ? \ l / g ) ;
*
Обратите внимание, что в этом примере есть некоторое упрощение: если атрибут
alt не будет указан первым, наше регулярное выражение не сработает. Т о чно также
оно не сработает, если перед al t будет указан дополнительный пробел. Позже мы
вернемся к этому примеру и решим проблему.
Как и раньше, первая группа будет распознавать одиночную или двойную кавыч
ку, сопровождаемую любым количеством символов (обратите внимание на вопро
сительный знак, который делает распознавание ленивым), за которыми следует \ 1 -
т.е. любое первое соответствие одинарной или двойной кавычки.
Давайте закрепим понятие ленивых и жадных соответствий. У д алим вопроси
тельный знак после *, сделав распознавание жадным. Запустите выражение снова.
Что вы видите? Понимаете, почему так получилось? Это очень важная концепция
для понимания регулярных выражений, поэтому, если остались неясности, я реко
мендую вам прочитать еще раз раздел по ленивому и жадному распознаваниям.
Групп ы замены
Одним из преимуществ, предоставляемых группировкой, является способность
выполнять более сложные замены. Продолжая наш пример с НТМL-кодом, скажем,
Группы замены 285

