Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Синтаксис регулярных выражений
Обычные символы, не имеющие специального значения, могут присутствовать в шаблоне и они будут трактоваться как есть. Пример указания в шаблоне последовательности обычных символов:
let p = /строка/;
console.log( p.test('строка') ); // true
Экранирование специальных символов
Внутри регулярного выражения символы .
, ^
, $
, *
, +
, ?
, {
, [
, ]
, \
, |
, (
и )
имеют специальное значение. Если эти символы должны трактоваться как есть, то их следует экранировать с помощью слэша. Некоторые специальные символы теряют свое специальное значение, если их разместить внутри квадратных скобок. В этом случае экранировать их не нужно. Например, метасимвол точка по умолчанию соответствует любому символу, кроме символа перевода строки. Если необходимо найти именно точку, то перед точкой необходимо указать символ \
или поместить точку внутри квадратных скобок ([.]
). Продемонстрируем это на примере проверки правильности введенной даты (листинг 8.2).
Листинг 8.2. Проверка правильности введенной даты
let d = '24,10.2020';
// Неправильная дата (вместо точки указана запятая)
let p = /^[0-3][0-9].[01][0-9].[12][09][0-9][0-9]$/;
// Символ \ не указан перед точкой
if ( p.test(d) ) console.log('Дата введена правильно');
else console.log('Дата введена неправильно');
// Выведет Дата введена правильно, т. к. точка означает любой символ
p = /^[0-3][0-9]\.[01][0-9]\.[12][09][0-9][0-9]$/;
// Символ \ указан перед точкой
if ( p.test(d) ) console.log('Дата введена правильно');
else console.log('Дата введена неправильно');
// Выведет Дата введена неправильно,
// т. к. перед точкой указан символ \, а в дате присутствует запятая
p = /^[0-3][0-9][.][01][0-9][.][12][09][0-9][0-9]$/;
// Точка внутри квадратных скобок
if ( p.test(d) ) console.log('Дата введена правильно');
else console.log('Дата введена неправильно');
// Выведет Дата введена неправильно
p = new RegExp('^[0-3]\\d\\.[01]\\d\\.[12][09]\\d\\d$');
// Символ \ указан перед точкой
if ( p.test(d) ) console.log('Дата введена правильно');
else console.log('Дата введена неправильно');
// Выведет Дата введена неправильно
Следует учитывать, что символ обратного слеша является специальным не только в шаблоне регулярного выражения, но и в строке. Поэтому его нужно экранировать при создании шаблона с помощью класса RegExp
. Обратите внимание на регулярное выражение в последнем примере:
'^[0-3]\\d\\.[01]\\d\\.[12][09]\\d\\d$'
Внутри шаблона регулярного выражения комбинация символов \d
является специальной и обозначает любые цифры. В строке символ \
должен заменяться на \\
. Поэтому вместо \d
указано \\d
, а вместо \.
— \\.
.
Чтобы не нужно было экранировать специальные символы в строке, следует использовать неформатированные строки (см. разд. 7.4):
let d = '24,10.2020';
p = new RegExp( String.raw`^[0-3]\d\.[01]\d\.[12][09]\d\d$` );
if ( p.test(d) ) console.log('Дата введена правильно');
else console.log('Дата введена неправильно');
// Выведет Дата введена неправильно
Метасимвол точка
теряет свое специальное значение, если его заключить в квадратные скобки. Кроме того, внутри квадратных скобок могут встретиться символы, которые имеют специальное значение (например, ^
и -
). Символ ^
теряет свое специальное значение, если он не расположен сразу после открывающей квадратной скобки:
let p = /[09^]/g; // 0, 9 или ^
let str = '0123456789^';
console.log( str.match(p) ); // [ '0', '9', '^' ]
Чтобы отменить специальное значение символа -
, его необходимо указать после перечисления всех символов, перед закрывающей квадратной скобкой:
let p = /[09-]/g; // 0, 9 или -
let str = '0123456789-';
console.log( str.match(p) ); // [ '0', '9', '-' ]
Все специальные символы можно сделать обычными, если перед ними указать символ \
:
let p = /[0\-9]/g; // 0, - или 9
let str = '0123456789-';
console.log( str.match(p) ); // [ '0', '9', '-' ]
Символ /
в регулярном выражении, ограниченном символами /
, также является специальным, поэтому его нужно экранировать:
let p = /[0\/9]/g; // 0, / или 9
let str = '0123456789-/';
console.log( str.match(p) ); // [ '0', '9', '/' ]
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов