如何使用正则表达式匹配没有扩展名的文件名单词?
How to match filename words without the extension using regex?
我想匹配文件名中不带下划线 (_) 和文件扩展名等字符的单词。例如,如果我有文件 image_one.jpg 和 image_two.png 那么我如何才能只匹配 image one
和 image two
?我不确定如何排除下划线和 .extension。
到目前为止,我有 \w*_\w*
但它匹配文件名,包括下划线,即 image_one
和 image_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)));
我想匹配文件名中不带下划线 (_) 和文件扩展名等字符的单词。例如,如果我有文件 image_one.jpg 和 image_two.png 那么我如何才能只匹配 image one
和 image two
?我不确定如何排除下划线和 .extension。
到目前为止,我有 \w*_\w*
但它匹配文件名,包括下划线,即 image_one
和 image_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)));