当前位置:  开发笔记 > 编程语言 > 正文

如何使用JavaScript从完整路径获取文件名?

如何解决《如何使用JavaScript从完整路径获取文件名?》经验,为你挑选了8个好方法。

有没有办法可以从完整路径获取最后一个值(基于'\'符号)?

例:

C:\Documents and Settings\img\recycled log.jpg

在这种情况下,我只想recycled log.jpg从JavaScript的完整路径中获取.



1> nickf..:
var filename = fullPath.replace(/^.*[\\\/]/, '')

这将处理\ OR/in路径


根据这个网站,使用`replace`比`substr`慢很多*,它可以与`lastIndexOf('/')+ 1`一起使用:http://jsperf.com/replace-vs-substring
在MAC OSX上不起作用,使用chrome,它在\后面逃脱了字符
burillient sirr对我有+1

2> Danpe..:

仅仅为了表现,我测试了这里给出的所有答案:

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和Pop风格的答案,感谢bobince!


根据元讨论,请在其他答案中添加适当的引用.更好地解释如何分析运行时也会有所帮助.
测试不正确。substringTest仅搜索正斜杠,execTest-仅搜索反斜杠,而其余两个同时处理两个斜杠。与实际结果无关(不再)。检查一下:https://jsperf.com/name-from-path

3> 小智..:

在Node.js中,您可以使用Path的解析模块 ......

var path = require('path');
var file = '/home/user/dir/file.txt';

var filename = path.parse(file).base;
//=> 'file.txt'



4> bobince..:

路径来自哪个平台?Windows路径不同于POSIX路径不同于Mac OS 9路径不同于RISC OS路径不同...

如果它是一个Web应用程序,其中文件名可以来自不同的平台,则没有一个解决方案.然而,合理的尝试是使用'\'(Windows)和'/'(Linux/Unix/Mac以及Windows上的替代方案)作为路径分隔符.这是一个非RegExp版本,可以带来额外的乐趣:

var leafname= pathname.split('\\').pop().split('/').pop();


你可以使用pop()而不是rev​​erse()[0].它也会修改原始数组,但在你的情况下也没问题.
`pathname`是"未定义"
+1直接解决方案没有手动解析人工以及该死的正则表达式

5> 小智..:

Ates,您的解决方案不能防止空字符串作为输入.在那种情况下,它失败了TypeError: /([^(\\|\/|\:)]+)$/.exec(fullPath) has no properties.

bobince,这是一个处理DOS,POSIX和HFS路径分隔符(和空字符串)的nickf版本:

return fullPath.replace(/^.*(\\|\/|\:)/, '');


如果我们用PHP编写这个JS代码,我们需要为每个\添加一个额外的\

6> 小智..:

以下JavaScript代码行将为您提供文件名.

var z = location.pathname.substring(location.pathname.lastIndexOf('/')+1);
alert(z);



7> Ates Goral..:

并不比nickf的答案更简洁,但是这个直接"提取"答案而不是用空字符串替换不需要的部分:

var filename = /([^\\]+)$/.exec(fullPath)[1];



8> 小智..:

询问"获取没有扩展名的文件名"的问题请参考此处,但没有解决方法.以下是Bobbie解决方案修改的解决方案.

var name_without_ext = (file_name.split('\\').pop().split('/').pop().split('.'))[0];

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有