Ваш шаблон \w*_\w*
может также соответствовать одному _
, так как слово chars необязательно.
Поскольку \w
также соответствует подчеркиванию, вы можете исключить его из \w
, используя Класс отрицанных символов. [^\W_]
.
Чтобы получить оба значения, вы можете использовать 2 группы захвата, и если шаблон должен совпадать только в конце строки, вы можете добавить $
в конце.
([^\W_]+)_([^\W_]+)\.\w+
Пояснение
([^\W_]+)
Группа захвата 1, соответствует 1+ разу слова char, кроме _
_
Подберите подчеркивание ([^\W_]+)
Группа захвата 2, также как и для группы 1 \.\w+
Подберите символы .
и 1+ слова (или \.(?:jpg|png)
, если быть более точным)
См. Демоверсию Regex
const regex = /([^\W_]+)_([^\W_]+)\.\w+/;
[
"image_one.jpg",
"image_two.png"
].forEach(s => console.log(s.match(regex).slice(1)));