在 JavaScript 中从没有文件名的文件路径获取目录的最有效方法是什么?
What's the most efficient way of getting the directory from file path without file name in JavaScript?
我想从JavaScript中没有文件名的文件路径中获取目录。我想要以下行为的输入和输出。
Input: '/some/path/to/file.txt'
Output: '/some/path/to'
Input: '/some/path/to/file'
Output: '/some/path/to/file'
Input: '/some/folder.with/dot/path/to/file.txt'
Output: '/some/folder.with/dot/path/to'
Input: '/some/file.txt/path/to/file.txt'
Output: '/some/file.txt/path/to'
我正在考虑使用 RegExp
来做到这一点。但是,不确定应该如何编写确切的 RegExp。
除了那个或 RegExp 之外,有人可以帮助我提供有效的解决方案吗?
您可以使用 lastIndexOf to get the index and then use slice 来获得想要的结果。
const strArr = [
"/some/path/to/file.txt",
"/some/path/to/file",
"/some/folder.with/dot/path/to/file.txt",
"/some/file.txt/path/to/file.txt",
];
const result = strArr.map((s) => {
if (s.match(/.txt$/)) {
const index = s.lastIndexOf("/");
return s.slice(0, index !== -1 ? index : s.length);
} else return s;
});
console.log(result);
使用正则表达式
const strArr = [
"/some/path/to/file.txt",
"/some/path/to/file",
"/some/folder.with/dot/path/to/file.txt",
"/some/file.txt/path/to/file.txt",
];
const result = strArr.map((s) => s.replace(/\/\w+\.\w+$/, ""));
console.log(result);
查看您的示例,您似乎想要将除最后一个文件名之外的任何内容都视为目录名,其中文件名始终包含一个点。
要获得该部分,您可以在 Javascript:
中使用此代码
str = str.replace(/\/\w+\.\w+$/, "");
正则表达式 \/\w+\.\w+$
匹配一个 /
和 1+ 个单词字符,后跟一个点,然后在字符串结尾之前再跟一个 1+ 个单词字符。替换只是一个空字符串。
但是,请记住,某些文件名可能不包含任何点字符,这种替换在这些情况下不起作用。
我想从JavaScript中没有文件名的文件路径中获取目录。我想要以下行为的输入和输出。
Input: '/some/path/to/file.txt'
Output: '/some/path/to'
Input: '/some/path/to/file'
Output: '/some/path/to/file'
Input: '/some/folder.with/dot/path/to/file.txt'
Output: '/some/folder.with/dot/path/to'
Input: '/some/file.txt/path/to/file.txt'
Output: '/some/file.txt/path/to'
我正在考虑使用 RegExp
来做到这一点。但是,不确定应该如何编写确切的 RegExp。
除了那个或 RegExp 之外,有人可以帮助我提供有效的解决方案吗?
您可以使用 lastIndexOf to get the index and then use slice 来获得想要的结果。
const strArr = [
"/some/path/to/file.txt",
"/some/path/to/file",
"/some/folder.with/dot/path/to/file.txt",
"/some/file.txt/path/to/file.txt",
];
const result = strArr.map((s) => {
if (s.match(/.txt$/)) {
const index = s.lastIndexOf("/");
return s.slice(0, index !== -1 ? index : s.length);
} else return s;
});
console.log(result);
使用正则表达式
const strArr = [
"/some/path/to/file.txt",
"/some/path/to/file",
"/some/folder.with/dot/path/to/file.txt",
"/some/file.txt/path/to/file.txt",
];
const result = strArr.map((s) => s.replace(/\/\w+\.\w+$/, ""));
console.log(result);
查看您的示例,您似乎想要将除最后一个文件名之外的任何内容都视为目录名,其中文件名始终包含一个点。
要获得该部分,您可以在 Javascript:
中使用此代码str = str.replace(/\/\w+\.\w+$/, "");
正则表达式 \/\w+\.\w+$
匹配一个 /
和 1+ 个单词字符,后跟一个点,然后在字符串结尾之前再跟一个 1+ 个单词字符。替换只是一个空字符串。
但是,请记住,某些文件名可能不包含任何点字符,这种替换在这些情况下不起作用。