2010-03-26 11 views
21

Ho un percorso completo di un'immagine, che sto usando jQuery per leggere, sotto forma $('img.my_image').attr('src') però voglio solo la porzione nome del file (scartando il percorso).ottenere solo il nome del file da un percorso con JavaScript

Esistono funzioni integrate per eseguire questa operazione o una regex può essere l'unica opzione?

+0

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

+0

ahh fresco, ho ha fatto la ricerca ma probabilmente era nomefile! = il nome del file mi ha indotto a non trovarlo. – DCD

risposta

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

non funziona per linux e mac è necessario dividere (\ e /); – RubbelDeCatc

+0

Il muggito della risposta di RubbelDeCatc funziona bene sia per i forward che per i backslash se è necessaria una soluzione multipiattaforma. – user1404617

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

In JavaScript è possibile fare

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

Questo ... è geniale! –

+2

Questo è meglio della risposta accettata, secondo me. – Marquizzo

+0

Penso che dovrebbe essere così var nomefil = path.split ('\\'). Pop(); Verifica il codice precedente e non funziona per IE e smartphone – Moe

2

Ho trovato un movimentazione Unix e Windows-like path-stringhe versione migliore.

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

uscita sarà cat.jpg

Numero 2: (forse più veloce)

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

uscita sarà cat. jpg

+0

Il primo metodo concatenerà il percorso completo a una singola stringa senza barre per il percorso di Windows. –

+0

@ManuM Quando si eseguono questi test con stringhe letterali, è necessario utilizzare doppie barre rovesciate nella stringa come 'var win_path = 'c: \\ temp \\ images \\ cat.jpg';'. Altrimenti non saranno interpretati come backslash da JavaScript. – user1404617

+0

Scusa non l'ho mai provato con Windows ma forse il problema del doppio bs con il percorso di Windows è causato dalle tre barre rovesciate (\\\) nell'espressione regolare. – RubbelDeCatc

0

Utilizzando questa soluzione è possibile ottenere entrambi i nomi con e senza estensione file.

 

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

Problemi correlati