2010-03-26 33 views
21

Tengo una ruta de acceso completa a una imagen, que estoy usando jquery para leer, en el formulario $('img.my_image').attr('src'), pero solo quiero la parte del nombre de archivo (descartando la ruta).Obtener el nombre de archivo de una ruta con Javascript

¿Hay alguna función incorporada para hacer esto, o sería una regex la única opción?

+0

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

+0

ahh cool, busqué pero probablemente era un nombre de archivo! = el nombre del archivo me hizo no encontrarlo. – DCD

Respuesta

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

no funciona para Linux y Mac, necesita dividir (\ y /); – RubbelDeCatc

+0

La respuesta de RubbelDeCatc a continuación funciona bien tanto para adelante como para atrás si se necesita una solución multiplataforma. – user1404617

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

en JavaScript que podría hacer

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

Esto ... es genio! –

+2

Esto es mejor que la respuesta aceptada, en mi opinión. – Marquizzo

+0

Creo que debería ser así: var Filename = path.split ('\\'). Pop(); Prueba el código anterior y no funciona para IE y teléfono inteligente – Moe

2

me encontré con un mejor manejo de Unix y Windows-como-path cadenas de versión.

Número 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(/^.*[\\\/]/, '')); 

salida será cat.jpg

Número 2: (tal vez más rápido)

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()); 

salida será gato. jpg

+0

El primer método concatenará la ruta completa a una única cadena sin barras para la ruta de Windows. –

+0

@ManuM Al probar estos con literales de cadena, debe usar doble barra invertida en su cadena como 'var win_path = 'c: \\ temp \\ images \\ cat.jpg';'. De lo contrario, no se interpretarán como barras diagonales inversas por JavaScript. – user1404617

+0

Lo siento, nunca lo probé con Windows, pero tal vez el problema de doble bs con la ruta de Windows es causado por las tres barras diagonales inversas (\\\) en la expresión regular. – RubbelDeCatc

0

Usando esta solución puede obtener ambos nombres, es decir, con y sin extensión de archivo.

 

    //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(); 

Cuestiones relacionadas