You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用正则表达式将文件名拆分为主体与后缀两个部分

解决方案

你可以使用以下正则实现需求:

const myRegex = /^(.*?)(?:\.([^.]+))?$/

规则说明

  • 第一捕获组(.*?)采用懒惰匹配模式,会配合后面的结束规则自动截断到最后一个.的前一位
  • 中间的(?:\.([^.]+))?是可选的非捕获组,仅当存在后缀时触发:匹配最后一个.,同时将后续所有非.的内容作为第二捕获组(即后缀)
  • 如果文件名没有.,整个字符串会全部归入第一捕获组,第二捕获组返回undefined,你可以根据需要用|| ''转为空字符串。

测试用例

// 多段点的文件名
const [, filename1, extension1] = 'foo.baz.bing.bong'.match(myRegex) ?? []
// filename1: 'foo.baz.bing' | extension1: 'bong'

// 单段点的文件名
const [, filename2, extension2] = 'one.two'.match(myRegex) ?? []
// filename2: 'one' | extension2: 'two'

// 无后缀的文件名
const [, filename3, extension3] = 'noextension'.match(myRegex) ?? []
// filename3: 'noextension' | extension3: undefined

如果你希望无后缀场景下第二组直接返回空字符串,可以调整正则为:

const myRegex = /^(.*?)(?:\.([^.]+)|)$/

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:24:01