Как создать сайт

Наборы и диапазоны регулярных выражений

 

Здравствуйте! Мы с вами  на прошлых уроках уже рассмотрели классы и спецсимволы регулярных выражений    в этом же уроке речь пойдет о  наборах и диапозанах, применяемых в регулярных выражениях. Наборы очень полезны тем, что когда  нужно найти не один какой-то символ а группу символов, то ее  можно  заключить в […] и поиск будет происходить уже по этой группе. Но даавйте-ка рассмотрим все это на примерах.

классы и символы регулярных выражений

 

 

 

Наборы регулярных выражений

Давайте  рассмотри вот такой пример [еаf] означает любой символ из этих трёх: ‘а’, ‘е’, или ‘f’.

Такое выражение  называют набором. Наборы  могут использоваться в регулярном выражении наряду с обычными символами:

// найти [п или т], а затем "оп"
alert( "Пит-стоп".match(/[пт]оп/gi) ); // "топ"

Диапазоны регулярных выражений

В квадратных  скобках  могут также содержаться и  диапазоны символов.

Вот например, [a-z] – произвольный символ от a до z, [0-9] – цифра от 0 до 9.

В примере ниже мы будем искать «f», после которого идёт два раза любая цифра или буква от A до F:

// найдёт "fAF"
alert( "Exception 0fAF".match(/f[0-9A-F][0-9A-F]/g) );

Символьные классы – всего лишь более короткие записи для диапазонов, в частности:

  • \d –  это  [0-9],
  • \w – это  [a-zA-Z0-9_],
  • \s – это  [\t\n\v\f\r ]  да еще несколько юникодных пробельных символов.

В квадратных скобках можно использовать и диапазоны и символьные классы – вместе.

Например, если  нам нужно найти все слова в тексте. Если они на английском то  – это достаточно просто:

var str = "The moon is falling!";
alert( str.match(/\w+/g) ); // The moon is falling

В данном примере мы использовали \w+, что означает один или более символов, подходящих под класс \w. Это так называемые повторители или квантификаторы. Позже мы их рассмотрим.

var str = "Луна вогсходит!";
alert( str.match(/\w+/g) ); // null

В этом случае ничего найдено не будет ведь \w – это именно английская букво-цифра [a-zA-Z0-9_].

Читайте также  Паттерны и флаги регулярных выражений

А вот чтобы находило слово на русском – нужно уже использовать диапазон, например /[а-я]/.

Ну а чтобы на двух языках – все вместе:

var str = "Луна (the moon) встаёт!";
alert( str.match(/[\wа-я]+/gi) ); // Луна, the, moon, вста, т

Если вы внимательно присмотритесь к предыдущему примеру!  То можно увидеть  что  буква ё не находится причина кроется в кодировке юникод.

Буква ё стоит особняком  от основной кириллицы и её надо  добавить в диапазон дополнительно, вот так:

 var str = «Луна (the moon) встаёт!»;
alert( str.match(/[\wа-яё]+/gi) ); // Луна, the, moon, встаёт

Диапазоны исключения

Кроме обычных, существуют также так  называемые  исключающие диапазоны: [^…].

Квадратные скобки,  которые начинаются  со знака каретки: [^…]  будут  находить  любой символ, кроме указанных.

Пример:

  • [^аеf] – любой символ, кроме ‘a’, ‘e’, ‘f’
  • [^0-9] – любой символ, кроме цифры, равносильно \D.
  • [^\s] – любой не-пробельный символ, равносильно \S.

Пример ниже ищет любые символы, кроме букв, цифр и пробелов:

alert( "alice5@gmail.com".match(/[^\d\sA-Z]/gi) ); // "@", "."

Когда экранирование не нужно

Если мы хотим искать именно точку, а не любой символ, или именно символ ?, то надо использовать  экранирование: указать \. или \\.

В квадратных  же скобках большинство спецсимволов можно использовать без экранирования.

Таким образом  без экранирования можно использовать символы:

  • Точка ‘.’.
  • Плюс ‘+’.
  • Круглые скобки ‘( )’.
  • Дефис ‘-‘, если он находится в начале или конце квадратных скобок, то есть не выделяет диапазон.
  • Символ каретки ‘^’, если не находится в начале квадратных скобок.
  • А также открывающая квадратная скобка ‘[‘.

Точка «.» в квадратных скобках означает не «любой символ», а обычную точку.

Регулярное выражение  [.,] ищет один из символов «точка» или «запятая».

// Без экранирования
var re = /[-().^+]/g;
alert( "1 + 5 - 6".match(re) ); // найдёт +, -

ИТОГО

Для задания группы символов используются диапозоны. Для этого достаточно написать вот так [0-9].

Читайте также  Альтернация в регулярных выражениях

Также можно задавать и исключающий диапозон для этого в  квадратных скобках достаточно в начале поставить символ ^. Например вот так [^0-9]

Специальные символы можно не экранировать. Это такие смиволы как: ‘.’, ‘+’, ‘- ‘, ‘()’.

Задания

Type[^script]

Найдет ли регулярка /Type[^script]/ что-нибудь в строке Type?

А в строке TypeScript?

Найдите время в одном из форматов

Время может быть в формате часы:минуты или часы-минуты. И часы и минуты состоят из двух цифр, например 09:00, 21-30.

Напишите регулярное выражение для поиска времени:

var reg = /ваше выражение/;
alert( "Завтрак в 07:00. Обед - в 14-30".match(re) ); // 09:00, 21-30

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Плюсануть
Поделиться
Понравилась запись? Подпишитесь на обновления по почте:

Об авторе

admin administrator

Оставить ответ

2 + 8 =

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: