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. Регулярные выражения

