如何仅使用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
相关产品推荐
相关产品推荐

