You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

正则表达式:移除文件名最后下划线与扩展名间的内容

解决文件名中移除最后一个下划线与扩展名之间内容的正则问题

嘿,我明白你要做什么了——就是把文件名里最后一个下划线到扩展名前面的那串内容删掉对吧?你之前用的正则/[^_]+(?=\.)/差一点就对了,但问题出在它没把那个多余的下划线包含进来,所以替换后才会留下first_.png这种结果。

正确的正则表达式

直接用这个正则匹配要删除的部分,然后替换为空字符串就行:

/_[^_.]+(?=\.)/

正则逻辑拆解

  • _:精准匹配目标下划线(也就是文件名里最后一个分隔用的下划线)
  • [^_.]+:匹配下划线后面既不是下划线也不是点的所有字符——这部分就是你想删掉的冗余内容(比如0102
  • (?=\.):正向预查规则,确保我们匹配的内容后面紧跟着扩展名的起始点,避免误伤到文件名里其他的点或下划线。

示例代码(以JavaScript为例)

// 测试用文件名数组
const testFilenames = ["first_01.png", "second_file_02.png", "report_2024.tar.gz"];

// 执行替换处理
const cleanedFilenames = testFilenames.map(filename => 
  filename.replace(/_[^_.]+(?=\.)/, '')
);

console.log(cleanedFilenames);
// 输出结果: ["first.png", "second_file.png", "report.tar.gz"]

原正则问题分析

你之前用的/[^_]+(?=\.)/只会匹配点前面的非下划线字符(比如0102),替换之后,原来的下划线还留在文件名里,所以才会得到first_.png这种不符合预期的结果。我们只需要把那个下划线也加入到匹配范围里,就能一次性把它和后面的冗余内容一起删掉啦。

内容的提问来源于stack exchange,提问作者trapczyk

火山引擎 最新活动