Как получить доступ к сопоставленным группам в регулярных выражениях JavaScript?

Привет, народ! Я тут пытаюсь разобраться с регулярками в JavaScript. Хочу найти часть строки с помощью регулярного выражения, а потом получить доступ к этой подстроке в скобках. Вот что у меня есть:

let текст = 'что-то формат_123';
let результат = /(?:^|\s)формат_(.*?)(?:\s|$)/.exec(текст);

console.log(результат);
console.log(результат[1]);
console.log(результат[0]);

Первый лог выводит нормально, а вот дальше какая-то ерунда получается. Результат[1] выдает undefined, а результат[0] - какую-то дичь с ‘undefined’ внутри. Что я делаю не так? Может кто-нибудь объяснить, как правильно достать нужную часть строки из результата регулярки? Заранее спасибо за помощь!

Похоже, дело в том, что регэксп не находит совпадение. Проверь, точно ли входная строка соответствует шаблону. Может быть, стоит использовать метод match()? Какие версии кода ты пробовал? Интересно услышать, почему exec() не возвращает ожидаемое значение.

Дружище, тут дело в том, что твой регэксп слишком жесткий. Он ищет ‘формат_’ в начале строки или после пробела, а у тебя оно посередине. Вот как можно упростить:

let результат = /формат_(\d+)/.exec(текст);

Теперь результат[0] будет ‘формат_123’, а результат[1] - ‘123’. Так проще работать с группами. И не забудь проверить, что результат не null, прежде чем обращаться к его элементам. Удачи с кодом!

ну смотри, тут проблема в том, что твой регэксп слишком сложный. давай его упростим:

let текст = ‘что-то формат_123’;
let результат = /формат_(\d+)/.exec(текст);

теперь результат[0] будет ‘формат_123’, а результат[1] - ‘123’. так гораздо проще работать с группами в регулярках. главное - не усложнять, если не нужно. попробуй так и скажи, получилось ли))