Almeno tre modi:
Un'espressione regolare:
var result = /[^/]*$/.exec("foo/bar/test.html")[0];
... che dice "prendi la serie di caratteri che non contengono una barra" ( [^/]*
) alla fine della stringa ( $
). Quindi acquisisce i caratteri corrispondenti dall'oggetto match restituito indicizzando in esso ( [0]
); in un oggetto match, la prima voce è l'intera stringa corrispondente. Non c'è bisogno di gruppi di cattura.
Esempio dal vivo
Utilizzando lastIndexOf
e substring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf
fa quello che sembra: trova l'indice dell'ultima occorrenza di un carattere (beh, stringa) in una stringa, restituendo -1 se non trovato. Nove volte su dieci probabilmente vorrai controllare quel valore di ritorno ( if (n !== -1)
), ma in quanto sopra visto che stiamo aggiungendo 1 ad esso e chiamando sottostringa, finiremmo per fare str.substring(0)
che restituisce solo la stringa.
utilizzando Array#split
Sudhir e Tom Walters hanno coperto questo qui e qui , ma solo per completezza:
var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();
split
divide una stringa usando il delimitatore dato, restituendo un array.
La soluzione lastIndexOf
/ substring
è probabilmente la più efficiente (anche se bisogna sempre stare attenti a dire qualcosa su JavaScript e sulle prestazioni, poiché i motori variano in modo così radicale l'uno dall'altro), ma a meno che non lo si faccia migliaia di volte in un ciclo, non Non importa e mi impegno per la chiarezza del codice.