Au moins trois façons:
Une expression régulière:
var result = /[^/]*$/.exec("foo/bar/test.html")[0];
... qui dit "saisissez la série de caractères ne contenant pas de barre oblique" ( [^/]*
) à la fin de la chaîne ( $
). Ensuite, il récupère les caractères correspondants de l'objet de correspondance retourné en les indexant ( [0]
); dans un objet de correspondance, la première entrée est l'ensemble de la chaîne correspondante. Pas besoin de groupes de capture.
Exemple en direct
Utilisation lastIndexOf
et substring
:
var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
lastIndexOf
fait ce que ça donne: il trouve l'index de la dernière occurrence d'un caractère (enfin, chaîne) dans une chaîne, renvoyant -1 s'il n'est pas trouvé. Neuf fois sur dix, vous voudrez probablement vérifier cette valeur de retour ( if (n !== -1)
), mais dans ce qui précède, puisque nous y ajoutons 1 et appelons substring, nous finirions par faire str.substring(0)
ce qui renvoie simplement la chaîne.
En utilisant Array#split
Sudhir et Tom Walters ont cela couvert ici et ici , mais juste pour être complet:
var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();
split
divise une chaîne en utilisant le délimiteur donné, retournant un tableau.
La solution lastIndexOf
/ substring
est probablement la plus efficace (même s'il faut toujours faire attention à ne rien dire sur JavaScript et les performances, car les moteurs varient si radicalement les uns des autres), mais à moins que vous ne le fassiez des milliers de fois en boucle, cela ne peu importe et je m'efforcerais de clarifier le code.