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

м
       Наборы си в олов
          Наборы символов (character set) обеспечивают компактный способ записи чередо­
       вания одиночного символа. Впоследствии мы скомбинируем их с возможностью по­
       вторения и увидим, как можно расширить регулярное выражение для распознавания
       нескольких символов. Например, если вам нужно найти все числа в строке, можно
       использовать чередование.
       const  beer99  =  " 9 9   bottles  of  beer  on  the  wall  "  +
           "take  1  down  and  pass  i t   around  -- "  +
           " 9 8   bottles  o f   beer  on  the  wall . " ;
       const  matches  =  beer99 . m atch ( / 0  J 1  1 2 1 3 1 4 1 5 1 6 1 7  1 8 1 9 /g) ;

          Как утомительно! А что если мы хотим распознавать не числа, а символы? Числа
       и символы? Наконец, что если вы хотите распознавать все, что не число? Вот где
       в игру вступают наборы символов. В самом простом случае они обеспечивают более
       компактный способ представления чередования одиночных цифр. Более того, они
       позволяют задавать диапазоны. Вот как мы могли бы переписать приведенное выше.
       const  ml   beer99 . m atch ( /  [ 0 1 2 3 4 5 6 7 8 9 ] / g ) ;  / /  хорошо
                      9
                            h
       const  m2  =  beer 9 . m atc ( /  [ 0 - 9 ] / g ) ;   / /  еще  лучше !
          Диапазоны можно даже объединять. Вот как мы распознавали бы символы, числа
       и некоторые из знаков пунктуации (им соответствовать будет все в первоначальной
       строке, кроме пробельных символов).
       const  match  =  beer99 . m atch ( /  [ \- 0 -9a-z . ] / ig) ;

          Обратите внимание, что порядок следования здесь не имеет значения: мы легко
       могли бы использовать /  .   a - z 0 - 9 \ - ]   /. Для распознавания символа "-" его следует
                              [
       экранировать; в противном случае JavaScript попытается интерпретировать его как
       часть диапазона (вы можете также поместить его прямо перед закрывающей ква­
       дратной скобкой без экранирования).
          Другое очень мощное свойство наборов символов - это способность инвертиро­
       вать наборы символов. Инвертированные наборы символов говорят: "Соответству­
       ет все,  кроме этих символов".  Для инверсии набора символов используйте символ
       галочки ( л) как первый символ в наборе.

       const  match  =  beer99 . m atch ( /  [ л \ - 0-9a-z . ] / )  ;
          В нашей исходной строке этому регулярному выражению будет соответствовать
       только пробельный символ (если нам нужно распознать только пробельные симво­
       лы, есть куда лучший способ сделать это, о чем мы узнаем вскоре).








       278      Глава  1 7 . Регулярные выражения
   270   271   272   273   274   275   276   277   278   279   280