вытащить подстроку из строки regex js

Вообщем нашел паттерн, для проверки Российского номера

/^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/gm

Она работает в тестерах. Когда ввожу реальные номера. Но вырезать из строки номер - не получается. У меня есть строка, например

let myStr = "Привет, вот мой номер +79994441632";
let pattern = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/gm;
console.dir(myStr.match(pattern));

Выводится null. Номер выводится лишь только тогда, когда я все удаляю кроме самого номера(а нафиг оно мне так не нужно), мне нужно парсить номер из строки. Подскажите, как реализовать?
Вот так все работает

let myStr = "+79994441632";
let pattern = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/gm;
console.dir(myStr.match(pattern));

Output:

Array (1) [
"+79994441632"
]

Подскажите плиз, я уже и функции разные пробовал (matchAll, test, exec), не помогает.


Ответы (1 шт):

Автор решения: vsemozhebuty

У вас в начале и конце регулярки стоят символы начала и конца строки ^ и $, поэтому регулярка совпадает лишь со строками, содержащими только номер. Эти символы можно заменить на проверки, гарантирующие, что перед и после номера нет других цифр:

let myStr = "Привет, вот мой номер +79994441632";
let pattern = /(?<!\d)(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}(?!\d)/gm;
console.dir(myStr.match(pattern));

→ Ссылка