Для поиска в строке подстроки, которая соответствовует регулярному выражению, применяется метод 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