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

如何仅使用JS从文件路径中移除文件名保留上级目录路径?

JavaScript 移除路径中文件名、保留上级目录的实现方案

你当前使用的代码逻辑是匹配路径开头到最后一个路径分隔符(兼容Windows反斜杠\和Unix正斜杠/)的全部内容,将其替换为空,因此最终得到的只有末尾的文件名,和需求方向正好相反。只需要调整匹配逻辑,匹配最后一个路径分隔符到结尾的文件名部分,将其移除即可。

方案1:正则替换(和现有写法同源,改动最小)

直接调整正则匹配规则,匹配最后一个斜杠后的所有文件名内容,替换后保留末尾的路径分隔符即可:

const ruta_archivos = String.raw`C:\Users\usuario\Desktop\CyT\Proyectos\AlmPas\2022-06-17\luis@gmail.com\1234567890.zip`;
// 提取目录路径
const soloCarpeta = ruta_archivos.replace(/[\\\/][^\\\/]*$/, '\\');

// 输出结果:C:\Users\usuario\Desktop\CyT\Proyectos\AlmPas\2022-06-17\luis@gmail.com\

正则逻辑说明:

  • [\\\/]:匹配Windows路径的反斜杠或者Unix路径的正斜杠
  • [^\\\/]*$:匹配从当前位置到字符串结尾、所有不属于路径分隔符的字符,也就是最后一段的文件名
  • 替换为\\是为了保留目录末尾的反斜杠,和预期结果格式完全一致,如果需要适配Unix路径的正斜杠,可以根据运行环境调整替换的分隔符。

方案2:字符串截取写法(无正则,可读性更高,鲁棒性更强)

不需要记忆正则规则,直接通过查找最后一个路径分隔符的位置做字符串截取即可,同时兼容正反斜杠混合的路径场景:

const getParentDir = (filePath) => {
  const lastBackslashPos = filePath.lastIndexOf('\\');
  const lastSlashPos = filePath.lastIndexOf('/');
  // 取位置更靠后的分隔符作为截断点
  const splitPos = Math.max(lastBackslashPos, lastSlashPos);
  // 截取到分隔符位置+1,保留末尾的分隔符
  return filePath.slice(0, splitPos + 1);
}

// 测试
const ruta_archivos = String.raw`C:\Users\usuario\Desktop\CyT\Proyectos\AlmPas\2022-06-17\luis@gmail.com\1234567890.zip`;
const soloCarpeta = getParentDir(ruta_archivos);
// 输出和预期完全一致

这个写法额外的优势是,如果传入的路径本身就是目录路径(末尾已经带分隔符),代码也不会出现错误截断的问题,适配性更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:24:15