Книга: Выразительный JavaScript
Ищем набор символов
Ищем набор символов
Выяснить, содержит ли строка abc
, можно было бы и при помощи indexOf
. Регулярки позволяют пройти дальше и составлять более сложные шаблоны.
Допустим, нам надо найти любой номер. Когда мы в регулярке помещаем набор символов в квадратные скобки, это означает, что эта часть выражения совпадает с любым из символов в скобках.
Оба выражения находятся в строчках, содержащих цифру.
console.log(/[0123456789]/.test("in 1992"));
// ? true
console.log(/[0-9]/.test("in 1992"));
// ? true
В квадратных скобках тире между двумя символами используется для задания диапазона символов, где последовательность задаётся кодировкой Unicode. Символы от 0 до 9 находятся там просто подряд (коды с 48 до 57), поэтому [0-9]
захватывает их все и совпадает с любой цифрой.
У нескольких групп символов есть свои встроенные сокращения:
d
– любая цифра
w
– алфавитно-цифровой символ
s – пробельный символ (пробел, табуляция, перевод строки, и т. п.)
D
– не цифра
W
– не алфавитно-цифровой символ
S – не пробельный символ
.
– любой символ, кроме перевода строки
Таким образом можно задать формат даты и времени вроде 30-01-2003 15:20 следующим выражением:
var dateTime = /dd-dd-dddd dd:dd/;
console.log(dateTime.test("30-01-2003 15:20"));
// ? true
console.log(dateTime.test("30-jan-2003 15:20"));
// ? false
Выглядит ужасно, не так ли? Слишком много обратных слэшей, которые затрудняют понимание шаблона. Позже мы слегка улучшим его.
Обратные слэши можно использовать и в квадратных скобках. Например, [d.]
означает любую цифру или точку. Заметьте, что точка внутри квадратных скобок теряет своё особое значение и превращается просто в точку. То же касается и других специальных символов, типа +
.
Инвертировать набор символов – то есть, сказать, что вам надо найти любой символ, кроме тех, что есть в наборе – можно, поставив знак ^
сразу после открывающей квадратной скобки.
var notBinary = /[^01]/;
console.log(notBinary.test("1100100010100110"));
// ? false
console.log(notBinary.test("1100100010200110"));
// ? true
- Создаём регулярное выражение
- Проверяем на совпадения
- Ищем набор символов
- Повторяем части шаблона
- Группировка подвыражений
- Совпадения и группы
- Тип даты
- Границы слова и строки
- Шаблоны с выбором
- Механизм поиска
- Откаты
- Метод replace
- Жадность
- Динамическое создание объектов RegExp
- Метод search
- Свойство lastIndex
- Циклы по вхождениям
- Разбор INI файлы
- Международные символы
- Итог
- Упражнения
- Глава 9 Ищем спонсоров
- Набор текста
- Имена объектов длиной 68 символов
- Глава 7 Управление хранилищем данных
- 7.8 Управление иерархическим хранилищем
- Что делать, если надо создать несколько компакт-дисков с одним набором файлов?
- На сайтах вместо текста отображается непонятный набор символов
- В Adobe Acrobat Reader русский текст на экране читается нормально, а при печати получается текст из набора символов. Как...
- Наборы символов Firebird
- 8.2. Создание набора фреймов
- В полученных письмах вместо текста непонятный набор символов
- Создание нового документа и набор текста