Как сопоставить слова имени файла без расширения с помощью регулярных выражений? - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу сопоставить слова в имени файла без символов, таких как подчеркивание (_) и расширение файла. Например, если у меня есть файлы image_one.jpg и image_two.png, то как мне сопоставить только image one и image two? Я не уверен, как исключить подчеркивание и расширение.

Пока у меня есть \w*_\w*, но оно соответствует имени файла, включая подчеркивание, т.е. image_one и image_two

1 Ответ

0 голосов
/ 13 апреля 2020

Ваш шаблон \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)));
...