获取路径中的文件名

本文最后更新于:2023年8月24日 晚上

使用

功能:传递文件路径,获取其中的文件地址

一些例子:

1
2
3
4
5
6
7
8
basename('D:\\static\\pages\\index.html') // index.html
basename('D:/static/pages/index.html') // index.html
basename('D:/static/pages/index') // index
basename('../index.vue') // index.vue
basename('./../index.text.vue') // index.text.vue
basename('./../index.text.vue', false) // index.text
basename('D:/static/pages/.git') // .git
basename() // Error错误

basename.js

第一种写法:查找最后的分号后截取获取文件名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 获取路径中的文件名,仿path.basename
* @param path 文件路径
* @param suffix 是否保留文件后缀
*/
export const basename = (path, suffix = true) => {
// 防止传递空
if (!path) throw new Error('路径不可为空!')
// 找 / 分隔
let index = path.lastIndexOf('/')
// 如果没有就找 \\ 分隔
index = index !== -1 ? index : path.lastIndexOf('\\')
// 返回后一位到最后
let fileName = path.substring(index + 1)
if (suffix) return fileName
// 需要去除后缀
const suffixIndex = fileName.lastIndexOf('.')
if (suffixIndex !== -1) return fileName.substring(0, suffixIndex)
return fileName
}

第二种写法:使用正则直接获取文件名 ——by Kar

1
2
3
4
5
6
7
8
9
/**
* 获取路径中的文件名
* @param path 文件路径
* @param suffix 是否保留文件后缀
* @returns { string | undefined }
*/
export const getFileName = (path, suffix = true) => (suffix ?
/.*[/\\](.*?)$/ :
/.*[/\\](.*?)\..*?$/).exec('/' + path)?.[1]

细节:最后匹配时添加/防止出现单文件名导致正则中正反斜杠匹配不上,帅就完事了


获取路径中的文件名
https://xin-fas.github.io/2023/08/18/获取路径中的文件名/
作者
Xin-FAS
发布于
2023年8月18日
更新于
2023年8月24日
许可协议