2010-03-26 157 views
21

我有一个图像的完整路径,我正在使用jquery阅读,形式为$('img.my_image').attr('src')但是我只想要文件名部分(放弃路径)。从JavaScript路径获取文件名

是否有任何内置函数来做到这一点,或将正则表达式是唯一的选择?

+0

http://stackoverflow.com/questions/1302306/how-to-pull-the-file-name-from-a-url-using-javascript-jquery/1302339#1302339 – Gregoire 2010-03-26 19:22:33

+0

啊冷静,我做了搜索,但它可能是文件名!=文件名使我找不到它。您需要拆分(\和/);您需要拆分linux和mac的 – DCD 2010-03-26 19:23:42

回答

40
var fileNameIndex = yourstring.lastIndexOf("/") + 1; 
var filename = yourstring.substr(fileNameIndex); 
+2

。 – RubbelDeCatc 2015-07-29 07:30:21

+0

如果您需要跨平台解决方案,RubbelDeCatc的答案可以很好地适用于前向和反向。 – user1404617 2017-03-09 15:27:56

7
function getFileName(path) { 
return path.match(/[-_\w]+[.][\w]+$/i)[0]; 
} 
3

在Javascript中,你可以做

function getFileNameFromPath(path) { 
    var ary = path.split("/"); 
    return ary[ary.length - 1]; 
} 
51
var Filename= path.split('/').pop() 
+1

这是......天才! – 2014-09-02 08:19:54

+2

在我看来,这比接受的答案要好。 – Marquizzo 2014-09-08 18:34:55

+0

我认为这应该是这样的var Filename = path.split('\\')。pop();它测试上面的代码,它不适用于IE和智能手机。 – Moe 2014-10-21 13:12:43

2

我发现了一个更好的版本处理UNIX和Windows类路径字符串。

数1:

var unix_path = '/tmp/images/cat.jpg'; 
console.log(unix_path.replace(/^.*[\\\/]/, '')); 

var win_path = 'c:\\temp\images\cat.jpg'; 
console.log(win_path.replace(/^.*[\\\/]/, '')); 

输出将被cat.jpg

编号2:(也许更快)

var unix_path = '/tmp/images/cat.jpg'; 
console.log(unix_path.split(/[\\\/]/).pop()); 

var win_path = 'c:\\temp\images\cat.jpg'; 
console.log(win_path.split(/[\\\/]/).pop()); 

输出将被猫。 jpg

+0

第一种方法会将完整路径连接到单个字符串,而不是用于windows路径的斜杠。 – 2016-02-08 10:54:16

+0

@ManuM当使用字符串文字测试这些时,你必须在你的字符串中使用双反斜杠,比如'var win_path ='c:\\ temp \\ images \\ cat.jpg';'。否则,它们不会被JavaScript解释为反斜杠。 – user1404617 2017-03-09 15:22:17

+0

对不起,我从来没有用windows测试过它,但也许在windows正则表达式中由三条反斜杠(\\\)引起的双重bs问题。 – RubbelDeCatc 2017-05-24 07:24:44

0

使用此解决方案,您可以同时获得两个名称,即带和不带文件扩展名。

 

    //getting image source 
    var path=$('img.my_image').attr('src'); 

    //splitting url and getting filename with file extension 
    var file=path.split('/').pop(); 

    //removing extension and keeping just the filename 
    var filename=file.split('.').shift();