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

Вместо методов класса String можно воспользоваться методами класса RegExp:

  • test(<Строка>) — возвращает true или false в зависимости от того, был поиск успешным или нет. Если используется глобальный поиск, то при каждом вызове метода указатель текущей позиции будет перемещаться в конец текущего сопоставления. Пример:
let p = /20[14]/g;
let str = '200, 201, 202, 203, 204';
console.log( p.test(str) );    // true
console.log( p.test(str) );    // true
console.log( p.test(str) );    // false
console.log( p.test('200') );  // false
  • exec(<Строка>) — позволяет получить массив с результатами поиска, совпадающими с регулярным выражением. Если используется глобальный поиск, то при каждом вызове метода указатель текущей позиции будет перемещаться в конец текущего сопоставления. Если совпадений нет, то метод вернет значение null. Пример:
let p = /([0-9]{2}):([0-9]{2}):([0-9]{2})/g;
let str = '18:47:27 05:12:22';
console.log( p.exec(str) );
/* [
   '18:47:27',
   '18',
   '47',
   '27',
   index: 0,
   input: '18:47:27 05:12:22',
   groups: undefined
 ] */
console.log( p.exec(str) );
/* [
   '05:12:22',
   '05',
   '12',
   '22',
   index: 9,
   input: '18:47:27 05:12:22',
   groups: undefined
 ] */
console.log( p.exec(str) );    // null
console.log( p.exec('200') );  // null

Первый элемент массива соответствует найденному фрагменту. Второй, третий и четвертый элементы содержат фрагменты, соответствующие группам метасимволов ([0-9]{2}), заключенным в круглые скобки. Номер скобок по порядку следования в регулярном выражении соответствует индексу фрагмента в массиве.

Перебрать все совпадения с помощью цикла while можно так:

let p = /([0-9]{2}):([0-9]{2}):([0-9]{2})/g;
let str = '18:47:27 05:12:22';
let arr;
while ( (arr = p.exec(str)) ) {
   console.log( arr );
}

Если нужно проверить, чтобы строка полностью соответствовала шаблону, нужно в шаблоне указать привязку к началу (^) и концу ($) строки. В качестве примера проверим правильность введенной даты в конце команды (листинг 8.1).

Листинг 8.1. Проверка правильности введенной даты

const process = require('process');
if (process.argv.length == 3) {
   let d = process.argv[2];
   let p = /^[0-3][0-9]\.[01][0-9]\.[0-9]{4}$/;
   if ( p.test(d) ) {
      console.log('Дата введена правильно');
   }
   else {
     console.log('Вы неправильно ввели дату');
   }
}
else {
   console.log('Передайте дату в формате день.месяц.год ' +
               'в конце команды');
}

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

Помощь сайту

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

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