有没有一种方法可以获取完整路径中最后一个值(基于'\'符号)?
例子:
C:\Documents and Settings\img\recycled log.jpg
对于这种情况,我只想在JavaScript中从完整路径中获取recycled log.jpg
。
有没有一种方法可以获取完整路径中最后一个值(基于'\'符号)?
例子:
C:\Documents and Settings\img\recycled log.jpg
对于这种情况,我只想在JavaScript中从完整路径中获取recycled log.jpg
。
var filename = fullPath.replace(/^.*[\\\/]/, '')
这个代码可以处理路径中的 \ 或 / 符号
仅出于性能考虑,我测试了这里给出的所有答案:
var substringTest = function (str) {
return str.substring(str.lastIndexOf('/')+1);
}
var replaceTest = function (str) {
return str.replace(/^.*(\\|\/|\:)/, '');
}
var execTest = function (str) {
return /([^\\]+)$/.exec(str)[1];
}
var splitTest = function (str) {
return str.split('\\').pop().split('/').pop();
}
substringTest took 0.09508600000000023ms
replaceTest took 0.049203000000000004ms
execTest took 0.04859899999999939ms
splitTest took 0.02505500000000005ms
获胜者是 Split and Pop 规则,感谢 bobince !
path.split(/.*[\/|\\]/)[1];
- tim-montaguevar path = require('path');
var file = '/home/user/dir/file.txt';
var filename = path.parse(file).base;
//=> 'file.txt'
basename
函数:path.basename(file)
。 - derpedy-doo这条路径来自哪个操作系统平台?Windows路径不同于POSIX路径,也不同于Mac OS 9路径和RISC OS路径...
如果它是一个Web应用程序,文件名可能来自不同的平台,那么就没有一个通用的解决方案。然而,一个合理的尝试是同时使用 '\' (Windows) 和 '/' (Linux/Unix/Mac,同时也是Windows的另一种选择) 作为路径分隔符。以下是一个非正则表达式版本,以增加乐趣:
var leafname= pathname.split('\\').pop().split('/').pop();
Ates,你的解决方案不能防止空字符串作为输入。在这种情况下,它会出现错误:TypeError:/( [^(\\ | / |:)]+)$ /。exec(fullPath)没有属性
。
Bobince,这是nickf的一个版本,可以处理DOS、POSIX和HFS路径分隔符(以及空字符串):
return fullPath.replace(/^.*(\\|\/|\:)/, '');
var z = location.pathname.substring(location.pathname.lastIndexOf('/')+1);
alert(z);
.split(['/','\\'])
和 .split("/,\\")
是一样的,但这绝对不是你想要的。 - Sebastian Simonpath.basename
方法。了解更多。const path = require('path');
const file = '/home/user/dir/file.txt';
const filename = path.basename(file);
//=> 'file.txt'
URL
API并获取pathname
属性。该API将反斜杠规范化为斜杠。请注意,location
(在浏览器环境中)也可以工作,但仅适用于当前URL,而不是任意URL。%20
解析为空格,只需将其传递给decodeURIComponent
。
const getFileName = (fileName) => new URL(fileName).pathname.split("/").pop();
// URLs need to have the scheme portion, e.g. `file://` or `https://`.
console.log(getFileName("file://C:\\Documents and Settings\\img\\recycled log.jpg")); // "recycled%20log.jpg"
console.log(decodeURIComponent(getFileName("file://C:\\Documents and Settings\\img\\recycled log.jpg"))); // "recycled log.jpg"
console.log(getFileName("https://example.com:443/path/to/file.png?size=480")); // "file.png"
.as-console-wrapper { max-height: 100% !important; top: 0; }
https://example.com/file.png/
获取file.png
),请在.pop()
之前添加.filter(Boolean)
。URL
构造函数的第二个参数传递基本来源。 "https://example.com"
就足够了:new URL(fileName, "https://example.com")
。还可以在fileName
前面加上"https://"
—— URL
构造函数接受https://path/to/file.ext
作为有效的URL。try{ new URL(url); return true; } catch{ return false; }
检查URL是否有效。这是使用location
不可能的。在此答案中,URL
不一定用于当前URL。我不知道如何仅使用location
(且无需重定向)轻松获取任意URL的URI组件。另一个问题是搜索参数API:没有location.searchParams
,但URLSearchParams
对象有有用的方法。此外,location
在浏览器之外不存在,但URL
可能存在。 - Sebastian SimonLocation
异类对象是通过IDL、创建后调用JavaScript内部方法以及重写JavaScript内部方法的混合方式定义的。再加上其可怕的安全策略,请在实现此异常时格外小心。” - Sebastian Simon这个答案并不比nickf的答案更加简洁,但是它直接“提取”答案而不是用空字符串替换不想要的部分:
var filename = /([^\\]+)$/.exec(fullPath)[1];
replace
比起substr
要慢得多。substr
可以与lastIndexOf('/')+1
结合使用:http://jsperf.com/replace-vs-substring - NateFiddle
,尽管对于\\\
,它可以正常工作。 - Shubh