我想从没有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吗?
查看您的示例,您似乎希望将除了最后一个文件名之外的任何内容都视为目录名,其中文件名总是包含一个点。
要获得该部分,您可以在Javascript中使用以下代码:
str = str.replace(//w+.w+$/, "");
Regex/w+.w+$
匹配一个/
和字符串末尾前的一个+字字符,后面跟着一个点,后面跟着另外一个+词字符。替换只是一个空字符串。
但是,请记住,有些文件名可能不包含任何句点,这种替换在这种情况下不起作用。
您可以使用lastIndexOf获取索引,然后使用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);
使用regex
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);