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
   277   278   279   280   281   282   283   284   285   286   287