вытащить подстроку из строки 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 шт):
У вас в начале и конце регулярки стоят символы начала и конца строки ^ и $, поэтому регулярка совпадает лишь со строками, содержащими только номер. Эти символы можно заменить на проверки, гарантирующие, что перед и после номера нет других цифр:
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));