如何从使用JavaScript的完整path获取文件名?

有没有一种方法可以从完整path中获取最后一个值(基于'\'符号)?

例:

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

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

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

这将处理\或/path

什么平台的path来自? Windowspath不同于POSIXpath不同于Mac OS 9path不同于RISC OSpath不同…

如果这是一个networking应用程序的文件名可以来自不同的平台,没有一个解决scheme。 不过,合理的做法是在path分隔符上同时使用'\'(Windows)和'/'(Linux / Unix / Mac以及Windows上的替代选项)。 这是一个非RegExp版本的额外乐趣:

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

为了performance,我testing了这里给出的所有答案:

 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

Ates,您的解决scheme不能防止空string作为input。 在这种情况下, TypeError: /([^(\\|\/|\:)]+)$/.exec(fullPath) has no properties失败TypeError: /([^(\\|\/|\:)]+)$/.exec(fullPath) has no properties . TypeError: /([^(\\|\/|\:)]+)$/.exec(fullPath) has no properties

bobince,这是一个处理DOS,POSIX和HFSpath分隔符(和空string)的nickf版本:

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

在Node.js中,你可以使用Path的parsing模块 …

 var path = require('path'); var file = '/home/user/dir/file.txt'; var filename = path.parse(file).base; //=> 'file.txt' 

下面这行JavaScript代码会给你文件名。

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

不比nickf的答案更简洁,但这个直接“提取”的答案,而不是用空stringreplace不需要的部分:

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

要求“获取文件名不带扩展名”的问题在这里提到,但没有解决scheme。 这是从Bobbie解决scheme修改的解决scheme。

 var name_without_ext = (file_name.split('\\').pop().split('/').pop().split('.'))[0]; 
 <script type="text/javascript"> function test() { var path = "C:/es/h221.txt"; var pos =path.lastIndexOf( path.charAt( path.indexOf(":")+1) ); alert("pos=" + pos ); var filename = path.substring( pos+1); alert( filename ); } </script> <form name="InputForm" action="page2.asp" method="post"> <P><input type="button" name="b1" value="test file button" onClick="test()"> </form> 

完整的答案是:

 <html> <head> <title>Testing File Upload Inputs</title> <script type="text/javascript"> function replaceAll(txt, replace, with_this) { return txt.replace(new RegExp(replace, 'g'),with_this); } function showSrc() { document.getElementById("myframe").href = document.getElementById("myfile").value; var theexa = document.getElementById("myframe").href.replace("file:///",""); var path = document.getElementById("myframe").href.replace("file:///",""); var correctPath = replaceAll(path,"%20"," "); alert(correctPath); } </script> </head> <body> <form method="get" action="#" > <input type="file" id="myfile" onChange="javascript:showSrc();" size="30"> <br> <a href="#" id="myframe"></a> </form> </body> </html> 
 <html> <head> <title>Testing File Upload Inputs</title> <script type="text/javascript"> <!-- function showSrc() { document.getElementById("myframe").href = document.getElementById("myfile").value; var theexa = document.getElementById("myframe").href.replace("file:///",""); alert(document.getElementById("myframe").href.replace("file:///","")); } // --> </script> </head> <body> <form method="get" action="#" > <input type="file" id="myfile" onChange="javascript:showSrc();" size="30"> <br> <a href="#" id="myframe"></a> </form> </body> </html> 

成功为您的问题脚本,全面testing

 <script src="~/Scripts/jquery-1.10.2.min.js"></script> <p title="text" id="FileNameShow" ></p> <input type="file" id="myfile" onchange="javascript:showSrc();" size="30"> 

 <script type="text/javascript"> function replaceAll(txt, replace, with_this) { return txt.replace(new RegExp(replace, 'g'), with_this); } function showSrc() { document.getElementById("myframe").href = document.getElementById("myfile").value; var theexa = document.getElementById("myframe").href.replace("file:///", ""); var path = document.getElementById("myframe").href.replace("file:///", ""); var correctPath = replaceAll(path, "%20", " "); alert(correctPath); var filename = correctPath.replace(/^.*[\\\/]/, '') $("#FileNameShow").text(filename) } 

我用:

 var lastPart = path.replace(/\\$/,'').split('\\').pop(); 

它取代了最后的\所以它也适用于文件夹。

 function getFileName(path, isExtension){ var fullFileName, fileNameWithoutExtension; // replace \ to / while( path.indexOf("\\") !== -1 ){ path = path.replace("\\", "/"); } fullFileName = path.split("/").pop(); return (isExtension) ? fullFileName : fullFileName.slice( 0, fullFileName.lastIndexOf(".") ); } 

var file_name = file_path.substring(file_path.lastIndexOf('/'));

var fileName = filePath.split('/').pop();

它适用于我。

 <script type="text\javascript"> var path = '<%=Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath %>'; </script> 

请参阅http://www.codeprojectdownload.com