Я пытаюсь использовать регулярное выражение для поиска части строки, но у меня возникли проблемы с доступом к найденным подстрокам. Вот мой код:
let текст = 'что-то формат_123';
let результат = /(?:^|\s)формат_(.*?)(?:\s|$)/.exec(текст);
console.log(результат);
console.log(результат[1]);
console.log(результат[0]);
Я ожидаю получить ‘123’, но почему-то выводится ‘undefined’. Что я делаю не так? Как правильно получить доступ к найденным группам в регулярном выражении?
Буду благодарен за помощь в решении этой проблемы!
привет! я тоже сталкивался с похожей проблемой когда только начинал работать с регулярками. в твоем случае все дело в том, что ты используешь метод exec() вместо match(). попробуй заменить эту строку:
let результат = текст.match(/(?:^|\s)формат_(.*?)(?:\s|$)/);
и тогда все должно заработать как надо. результат[1] вернет тебе ‘123’. кстати, еще можно использовать String.prototype.matchAll() - он вернет итератор со всеми совпадениями, если их несколько. удачи в освоении регулярок!
Твоя регулярка в целом правильная, но есть нюанс с пробелами. В строке ‘что-то формат_123’ нет пробела перед ‘формат’, поэтому совпадения нет. Попробуй упростить:
let результат = /формат_(\d+)/.exec(текст);
console.log(результат[1]); // выведет ‘123’
Так будет работать. Если нужно учесть пробелы, можно добавить \s* перед ‘формат’ в регулярке. exec() вполне подходит, главное убедиться, что совпадение есть.