Como obter o nome do arquivo de um caminho completo usando JavaScript?

Existe uma maneira que eu possa obter o último valor (com base no símbolo ‘\’) de um caminho completo?

Exemplo:

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

Com este caso, eu só quero obter recycled log.jpg do caminho completo em JavaScript.

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

Isso manipulará os dois caminhos \ OR / in

Apenas por uma questão de desempenho, eu testei todas as respostas dadas aqui:

 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 

E o vencedor é a resposta do estilo Split e Pop , obrigado a bobince !

De que plataforma vem o caminho? Caminhos do Windows são diferentes de caminhos POSIX são diferentes do Mac OS 9 caminhos são diferentes de caminhos RISC OS são diferentes …

Se for um aplicativo da web em que o nome do arquivo pode vir de diferentes plataformas, não há uma solução única. No entanto, uma tentativa razoável é usar tanto ‘\’ (Windows) e ‘/’ (Linux / Unix / Mac e também uma alternativa no Windows) como separadores de caminho. Aqui está uma versão não-RegExp para diversão extra:

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

No Node.js, você pode usar o módulo de análise do Path …

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

Ates, sua solução não protege contra uma string vazia como input. Nesse caso, ele falhará com TypeError: /([^(\\|\/|\:)]+)$/.exec(fullPath) has no properties

bobince, aqui está uma versão do nickf’s que lida com delimitadores de caminho DOS, POSIX e HFS (e strings vazias):

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

A seguinte linha de código JavaScript fornecerá o nome do arquivo.

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

Não mais concisa do que a resposta de Nickf, mas esta diretamente “extrai” a resposta em vez de replace partes indesejadas por uma string vazia:

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

Uma pergunta perguntando “obter nome do arquivo sem extensão” se refere aqui, mas não há solução para isso. Aqui está a solução modificada da solução de Bobbie.

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

A resposta completa é:

   Testing File Upload Inputs    

Eu uso:

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

Substitui o último \ por isso também funciona com pastas.

   Testing File Upload Inputs    

Script com sucesso para sua pergunta, teste completo

  

  

Pouca function para include no seu projeto para determinar o nome do arquivo a partir de um caminho completo para o Windows, bem como os caminhos absolutos do GNU / Linux e UNIX.

 /** * @param {String} path Absolute path * @return {String} File name * @todo argument type checking during runtime * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf * @example basename('/home/johndoe/github/my-package/webpack.config.js') // "webpack.config.js" * @example basename('C:\\Users\\johndoe\\github\\my-package\\webpack.config.js') // "webpack.config.js" */ function basename(path) { let separator = '/' const windowsSeparator = '\\' if (path.includes(windowsSeparator)) { separator = windowsSeparator } return path.slice(path.lastIndexOf(separator) + 1) } 

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

 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(".") ); } 
  

consulte a partir de http://www.codeprojectdownload.com