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

