如何使用正则表达式匹配没有扩展名的文件名单词?

How to match filename words without the extension using regex?

我想匹配文件名中不带下划线 (_) 和文件扩展名等字符的单词。例如,如果我有文件 image_one.jpg 和 image_two.png 那么我如何才能只匹配 image oneimage two?我不确定如何排除下划线和 .extension。

到目前为止,我有 \w*_\w* 但它匹配文件名,包括下划线,即 image_oneimage_two

您的模式 \w*_\w* 也可能匹配单个 _,因为单词字符是可选的。

由于 \w 也匹配下划线,您可以使用否定字符 class.[^\W_].

将其从 \w 中排除

要获得这两个值,您可以使用 2 个捕获组,如果模式必须只匹配字符串的末尾,您可以在末尾添加 $

([^\W_]+)_([^\W_]+)\.\w+

说明

  • ([^\W_]+) 捕获第 1 组,匹配 1+ 次字符字符,除了 _
  • _匹配下划线
  • ([^\W_]+) 捕获组 2,与组 1 相同
  • \.\w+ 匹配一个 . 和 1+ 个单词字符(或 \.(?:jpg|png) 更精确)

看到一个Regex demo

const regex = /([^\W_]+)_([^\W_]+)\.\w+/;
[
  "image_one.jpg",
  "image_two.png"
].forEach(s => console.log(s.match(regex).slice(1)));