Page 279 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 279

Шабл о н , соответствующий всему
          Поскольку точка в регулярном выражении соответствует любому символу,  к р о­
       ме символа перевода строки, как распознать  абсолютно  любые  символы, включая
       и символы новых строк? (Эта задача встречается чаще, чем вы могли бы подумать!)
       Есть много способов сделать это, но, вероятно, самый распространенный  - [ \ s \ S] .
       Данный шаблон соответствует любому пробельному символу ... и всему, что им не
       является. Короче говоря, абсолютно всему!


       Групп и ровка

          Изученные до сих пор конструкции регулярных выражений позволяют выявлять
       только одиночные символы (хотя повторение позволяет распознавать повторяющиеся
       символы, но это все еще одиночные символы!). Гр уппировка (grouping) позволяет созда­
       вать подвыражения (subexpression), которые затем можно обработать, как единый блок.
          Кроме возможности создавать  подвыражения,  группировка позволяет "захва­
       тывать" результаты групп, чтобы использовать их позже. Такое поведение принято
       по умолчанию, однако есть способ создать "не захватываемую группу" (noncapturing
       group ), с чего мы и начнем. Если вы уже пользовались раньше регулярными выраже­
       ниями, это может показаться для вас новостью, но я рекомендую всегда использо­
       вать там где это возможно обычные не захватываемые группы. У них есть преиму­
       щество в производительности, поэтому если вы не собираетесь использовать резуль­
       таты работы группы позже, то используйте обычные группы. Группы определяются
       с помощью круглых скобок, а обычная не захватываемая группа определяется как
        ( ?  : <подвыражение>) , где  <подвыражение>  - это шаблон того, что вы пытаетесь рас­
       познать. Давайте рассмотрим несколько  примеров. Предположим,  что  вам  нужно
       распознать имена доменов верхнего уровня  . сот,  org и  . edu.
                                                    .
                            e
       const  text  =  "Visit  or i l l y . com  today ! " ;
       const  match  =  text . m atch ( / ( a-z ] +  ( ? : \ . c om l \  . o r J \ . e du) / i ) ;
                                                  g
          Еще одно преимущество групп заключается в том, что к ним можно применить
       повторение. Обычно повторение применяется только к одиночному символу, распо­
       ложенному слева от метасимвола повторения. Г р уппы позволяют применять повто­
       рение к целым строкам. Вот общий пример. Если вам нужно распознать URL, кото­
                             /
       рые начинаются с http :  / , https :  / или просто  / / (URL, независимые от прото­
                                                    с
                                       /
       кола), можете использовать группу с ноль или одним ( ? )   повторением.
       const  html  =  ' < link  rel=" stylesheet"  href="http : / / i nsecure . com/stuff . c s s " >\n '  +
         ' < link  rel="stylesheet "  href="https : / /secure . com/ securestu f . css">\n '  +
                                                                 f
                                    =
         ' < l i nk  rel=" stylesheet "  href " / / anything . com/flexiЫe . c s s " > ' ;
                                                            -
       const  matches  =  html . m atch ( / ( ? : h ttps? ) ? \ / \ / [ a - z ]   [a-z0-9 ] +  [ a - z 0 - 9 ] +/i ) ;
                                                                         g

       282      Глава 1 7. Регулярные выражения
   274   275   276   277   278   279   280   281   282   283   284