在 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+ 个单词字符。替换只是一个空字符串。

但是,请记住,某些文件名可能不包含任何点字符,这种替换在这些情况下不起作用。