JavaScript提取文件名与扩展名的方法实现需求
提取文件名和扩展名的JavaScript方法
这里有两种实用方案,分别适配浏览器和Node.js环境,都能正确处理包含相对路径(比如../)的输入,完美匹配你给出的示例需求:
浏览器环境方案
这个方案利用浏览器内置的URL API自动解析相对路径,无需额外依赖:
function extractFileNameAndExt(filePath) { // 用临时URL解析相对路径,得到规范化的绝对路径 const normalizedPath = new URL(filePath, 'http://dummy.com').pathname; // 提取最后一个斜杠后的完整文件名(含扩展名) const fullFileName = normalizedPath.split('/').pop(); // 找到最后一个点的位置,区分文件名和扩展名 const dotIndex = fullFileName.lastIndexOf('.'); if (dotIndex === -1) { // 处理无扩展名的文件 return [fullFileName, '']; } const fileName = fullFileName.slice(0, dotIndex); const extension = fullFileName.slice(dotIndex + 1); return [fileName, extension]; } // 测试你的示例路径 const testPath = '/vagrant/modules/americabuy/tranzilaNotifications/class/../../../a_tranzila/log/tranzila_2018-01-09_08-58-47.json'; console.log(extractFileNameAndExt(testPath)); // 输出: ["tranzila_2018-01-09_08-58-47","json"]
关键逻辑说明:
URLAPI会自动处理路径中的../和./,帮我们把相对路径转换成规范化的绝对路径,比手动写正则或字符串处理要可靠得多。- 用
split('/').pop()精准获取最后一个目录分隔符后的文件名部分,避免前面路径的干扰。 - 用
lastIndexOf('.')而不是split('.'),是为了兼容文件名本身包含多个点的情况(比如my.report.v1.pdf会提取my.report.v1和pdf)。
Node.js环境方案
如果是在Node.js环境下,直接用内置的path模块更简洁,这是Node处理文件路径的标准工具:
const path = require('path'); function extractFileNameAndExt(filePath) { // 解析路径为绝对路径,自动处理相对路径片段 const normalizedPath = path.resolve(filePath); // 获取完整文件名(含扩展名) const fullFileName = path.basename(normalizedPath); // 获取扩展名(去掉开头的点) const extension = path.extname(fullFileName).slice(1); // 获取不带扩展名的文件名 const fileName = path.basename(fullFileName, `.${extension}`); return [fileName, extension]; } // 测试示例 const testPath = '/vagrant/modules/americabuy/tranzilaNotifications/class/../../../a_tranzila/log/tranzila_2018-01-09_08-58-47.json'; console.log(extractFileNameAndExt(testPath)); // 输出: ["tranzila_2018-01-09_08-58-47","json"]
关键逻辑说明:
path.resolve()是Node处理路径的核心方法,能自动解析所有相对路径片段,返回绝对路径。path.basename()和path.extname()是专门用于提取文件名和扩展名的工具方法,无需自己处理字符串分割,更稳定。
内容的提问来源于stack exchange,提问作者Elia Weiss
相关产品推荐
相关产品推荐

