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