Мастер-классы по Javascript Екатеринбург Ростов-на-Дону Москва Узнать больше...
Содержание (скрыть) Содержание (показать)

Наборы и диапазоны символов

Несколько символов или символьных классов можно сгруппировать в квадратные скобки […] Такая группировка означает «искать любой символ из указанных в […]».

Например, [еао] означает любой символ из этих трёх: 'а', 'е', или 'о'.

Например:

alert( "Гоп-стоп".match( /[гт]оп/gi ) ); // "Гоп", "топ"

Несмотря на то, что в квадратных скобках несколько символов, ищется только один. Поэтому в примере ниже нет совпадений:

alert( "Вуаля".match( /В[уа]ля/ ); // совпадений нет

Было бы совпадение в строке Вуля или Валя.

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

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

// найдёт "xAF", но не "xce" (из Exception)
alert( "Exception 0xAF".match(/x[0-9A-F][0-9A-F]/g) );

В слове Exception есть сочетание xce, но оно не подходит, потому что буквы в нём маленькие, а в диапазоне — большие.

Скобки [0-9A-F] в регулярном выражении выше означают любой символ из диапазонов 0-9 или A-F.

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

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

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

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

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

Например:

  • [^аеуо] — любой символ, кроме 'a', 'e', 'o', 'u'
  • [^0-9] — любая не-цифра, то же что \D
  • [^\s] — любой не-пробельный символ, как и \S

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

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

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

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

А в строке JavaScript?

Решение
Решение

Ответы: нет, да.

  • В строке Java он ничего не найдёт, так как исключающие квадратные скобки в Java[^...] означают «один символ, кроме указанных». А после "Java" — конец строки, символов больше нет.

    alert( "Java".match(/Java[^script]/) ); // нет совпадений
    

  • Да, найдёт. Поскольку регэксп регистрозависим, то под [^script] вполне подходит символ "S".

    alert( "JavaScript".match(/Java[^script]/) ); // "JavaS"
    

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

Нужно обязательно экранировать только закрывающую квадратную скобку ']' и обратный слэш '\'. Другие специальные символы нужно экранировать только если они могут иметь особый смысл:

  • Дефис '-' экранируется только если он между других символов. Если дефис является первым или последним символом, тогда он точно не обозначает диапазон, поэтому воспринимается как обычный символ: [-…].
  • Символ каретки '^' нужно экранировать, если он в начале скобок: [\^..].
  • Все остальные символы, включая точку '.', плюс '+', круглые скобки '( )', открывающую квадратную скобку '[' в экранировании не нуждаются.

Например, регэксп [-().^] ищет один из символов -().^. В данном контексте эти символы не являются специальными.

var re = /[-().^]/g;

alert( "f(g)-^1".match(re) ); // найдёт (, ), -, ^

Без лишних слэшей регэксп становится короче и более читаемым. Однако, если вы их всё же поставите — вреда не будет:

var re = /[\-\(\)\.\^]/g;

alert( "f(g)-^1".match(re) ); // тоже работает: (, ), -, ^

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

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

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

Решение
Решение

Ответ: \d\d[-:]\d\d.

var re = /\d\d[-:]\d\d/g;
alert( "Завтрак в 09:00. Обед - в 21-30".match(re) );

Обратим внимание, что дефис '-' не экранирован, поскольку в начале скобок он не может иметь специального смысла.


Комментарии

  1. Приветствуются комментарии, содержащие дополнения и вопросы по статье, и ответы на них.
  2. Если ваш комментарий касается задачи -- откройте её в отдельном окне и напишите там.
  3. Комментарии без смысла, с рекламой или не о статье вообще - удаляются.
Наверх

Содержание

Реклама

Нашли опечатку?

Нашли опечатку на сайте? Что-то кажется странным?
Выделите соответствующий текст и нажмите Ctrl+Enter!

Последние Комментарии

Помоги другим!

Помоги другим узнать о хорошей статье!