Поиск в строке

Последнее обновление: 27.10.2023

Для поиска в строке подстроки, которая соответствовует регулярному выражению, применяется метод exec() объекта RegExp. Этот метод принимает строку для поиска и возвращает результат в виде массива. Например:

const contacts = "Email: mycomp@gmail.com  Phones: +1-234-567-8901 and +1-234-567-8902";
const phonePattern = /\+\d-\d{3}-\d{3}-\d{4}/;
const result = phonePattern.exec(contacts);
console.log(result);     
// Консольный вывод
// ['+1-234-567-8901', index: 32, input: 'Email: mycomp@gmail.com  Phones: +1-234-567-8901 and +1-234-567-8902', groups: undefined]

Здесь проверяем, есть ли в строке contacts текст, который соответствовует регулярному выражению phonePattern (то есть представляет номер телефона). В качестве результата возвращается массив из следующих элементов:

  • Первый элемент массива - непосредственно тот текст, который соответствует регулярному выражению. Так, в примере выше это текст "+1-234-567-8901"

  • Второй параметр - index - индекс найденного текста в строке

  • Третий параметр - input - входная строка

  • Последний элемент представляет отдельные группы

Если в строке не найден текст, который соответствует регулярному выражению, то возвращается null

Получим отдельные элементы этого массива:

const contacts = "Email: mycomp@gmail.com Phones: +1-234-567-8901 and +1-234-567-8902";
const phonePattern = /\+\d-\d{3}-\d{3}-\d{4}/;
const result = phonePattern.exec(contacts);
if(result){
    console.log("Phone number:", result[0]);    // +1-234-567-8901
    console.log("Index:", result.index);     // 32
}

Однако в строке у нас два телефонных номера (может быть и больше). И мы хотим извлечь все эти номера, а не только первый номер. В этом случае нам надо воспользоваться флагом g

Так, изменим предыдущий пример, применив флаг g:

const contacts = "Email: mycomp@gmail.com Phones: +1-234-567-8901 and +1-234-567-8902";
const phonePattern = /\+\d-\d{3}-\d{3}-\d{4}/g;
let result;
while ((result = phonePattern.exec(contacts)) !== null){
    console.log("Phone number:", result[0]);
    console.log("Index: ", result.index);
}

В цикле while извлекаем все сопоставления шаблона с текстом в переменную result, пока не останется сопоставлений. Обратите внимание, где в регулярном выражении указывается флаг g: /\+\d-\d{3}-\d{3}-\d{4}/g. Консольный вывод:

Phone number: +1-234-567-8901
Index:  32
Phone number: +1-234-567-8902
Index:  52
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850