Метасимволы. Регулярные выражения

Как мы уже видели в приведенных ранее примерах, в регулярных выражениях присутствуют специальные символы, так называемые метасимволы. Они не всегда соответствуют отдельным символам строки, а управляют тем, как производится проверка строк.

Перечислим метасимволы, применяемые в регулярных выражениях:

  • ^ — привязка к началу строки. Если указан модификатор m, то соответствует началу каждой подстроки;
  • $ — привязка к концу строки. Если указан модификатор m, то соответствует концу каждой подстроки;
  • [] — позволяет указать символы, которые могут встречаться на этом месте в строке. Можно перечислять символы подряд или указать диапазон через тире;
  • [^] — позволяет указать символы, которые не могут встречаться на этом месте в строке. Можно перечислять символы подряд или указать диапазон через тире;
  • n|m — соответствует одному из фрагментов n или m:
let p = /красн((ая)|(ое))/g;
let str = 'красная или красное, но не красный';
console.log( str.match(p) );
// [ 'красная', 'красное' ]
  • . (точка) — любой символ, кроме символа перевода строки (\n). Если указан модификатор s, то точка соответствует любом символу, включая символ перевода строки. Внутри квадратных скобок точка не имеет специального значения:
let p = /.+/g;
let str = '10\n20';
console.log( str.match(p) ); // [ '10', '20' ]
p = /.+/gs;
console.log( str.match(p) ); // [ '10\n20' ]
p = /[.]+/gs;
console.log( str.match(p) ); // null

Если нужно найти соответствие любому символу, включая символ перевода строки, то можно воспользоваться следующим кодом: [\s\S]. Класс \s означает любой пробельный символ, а класс \S — любой не пробельный символ. Пример:

let p = /.+/g;
let str = '10\n20';
console.log( str.match(p) ); // [ '10', '20' ]
p = /[\s\S]+/g;
console.log( str.match(p) ); // [ '10\n20' ]

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

let p = /^[0-9]+$/; // Строка может содержать только числа
if ( p.test('2') ) console.log('Число'); // Выведет: Число
else console.log('Не число');
if ( p.test('Строка2') ) console.log('Число');
else console.log('Не число');          // Выведет: Не число

Не указав привязку к началу и концу, мы получим соответствие шаблону любого числа внутри строки:

let p = /[0-9]+/;
if ( p.test('Строка2') )
     console.log('Есть число');        // Выведет: Есть число
else console.log('Нет числа');

Можно указать привязку только к началу или только к концу строки:

let p = /[0-9]+$/;
if ( p.test('Строка2') ) console.log('Есть число в конце строки');
else console.log('Нет числа в конце строки');
// Выведет: Есть число в конце строки
p = /^[0-9]+/;
if ( p.test('Строка2') ) console.log('Есть число в начале строки');
else console.log('Нет числа в начале строки');
// Выведет: Нет числа в начале строки

В квадратных скобках [] можно указать символы, которые могут встречаться на этом месте в строке. Можно перечислять символы подряд или указать диапазон через тире:

  • [09] — соответствует цифре 0 или 9;
  • [0-9] — соответствует любой цифре от 0 до 9;
  • [абв] — соответствует буквам а, б и в;
  • [а-г] — соответствует буквам а, б, в и г;
  • [а-яё] — соответствует любой букве от а до я;
  • [АБВ] — соответствует буквам А, Б и В. Обратите внимание, если не указан модификатор i, регистр будет иметь значение;
  • [А-ЯЁ] — соответствует любой букве от А до Я;
  • [а-яА-ЯёЁ] — соответствует любой русской букве в любом регистре;
  • [0-9а-яА-ЯёЁa-zA-Z] — любая цифра и любая русская или латинская буква независимо от регистра.
Обратите внимание

Значение можно инвертировать, если после первой скобки указать символ ^. Таким образом можно указать символы, которых не должно быть на этом месте в строке:

  • [^09] — не цифра 0 или 9;
  • [^0-9] — не цифра от 0 до 9;
  • [^а-яА-ЯёЁa-zA-Z] — не русская или латинская буква в любом регистре.

Учебник по Node.js и JavaScript
Учебник по JavaScript (Node.js) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов