Obtenir la valeur d'une chaîne après une barre oblique en JavaScript

112

J'essaye déjà depuis plus d'une heure et je n'arrive pas à trouver la bonne façon de le faire, même si c'est probablement assez facile:

J'ai quelque chose comme ça: foo/bar/test.html

Je voudrais utiliser jQuery pour tout extraire après le dernier /. Dans l'exemple ci-dessus, la sortie serait test.html.

Je suppose que cela peut être fait en utilisant substret indexOf(), mais je ne trouve pas de solution de travail.

r0skar
la source

Réponses:

243

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 lastIndexOfet substring:

var str = "foo/bar/test.html";
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);

lastIndexOffait 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/ substringest 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.

TJ Crowder
la source
1
Comment adapteriez-vous cela pour renvoyer la chaîne avant la barre oblique finale? (Ie retourne le nom du dossier parent)
wbadart
28

Vous n'avez pas besoin de jQuery, et il existe de nombreuses façons de le faire, par exemple:

var parts = myString.split('/');
var answer = parts[parts.length - 1];

Où myString contient votre chaîne.

Tom Walters
la source
3
+1 (pour travailler) soulignant que jQuery n'est pas la solution ultime pour les problèmes javascript.
Andrew Jackman
1
Ceci est une solution buggy, essayez ce qui se passe si vous ajoutez la barre oblique au slug? Il renvoie 0. Et que se passe-t-il s'il n'y a pas de limace? - renvoie NaN! wtf? bad code
Donatas Cereska
1) La question était liée à une entrée qui n'était pas nulle 2) L'entrée était liée à des entrées se terminant par des noms de fichiers (pas de barres obliques) 3) La réponse acceptée est en effet une bien meilleure solution, d'où les nombreux votes à la hausse 4) Vous êtes invités à ajouter votre propre solution
Tom Walters
12
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));
Kasdega
la source
9

Essayer;

var str = "toto / bar / test.html";
var tmp = str.split ("/");
alert (tmp.pop ());
Sudhir Bastakoti
la source
5

Quand je sais que la chaîne sera raisonnablement courte, j'utilise la doublure suivante ... (n'oubliez pas d'échapper les contre-obliques)

// if str is C:\windows\file system\path\picture name.jpg
alert( str.split('\\').pop() );

l'alerte apparaît avec picture name.jpg

DaveAlger
la source
2
String path ="AnyDirectory/subFolder/last.htm";
int pos = path.lastIndexOf("/") + 1;

path.substring(pos, path.length()-pos) ;

Vous avez maintenant le dernier.htm dans la chaîne de chemin.

Zar E Ahmer
la source
1

poids léger

string.substring(start,end)

start = Required. La position où commencer l'extraction. Le premier caractère est à l'index 0`.

end = Optional. La position (jusqu'à, mais non comprise) où terminer l'extraction. S'il est omis, il extrait le reste de la chaîne.

    var string = "var1/var2/var3";

    start   = string.lastIndexOf('/');  //console.log(start); o/p:- 9
    end     = string.length;            //console.log(end);   o/p:- 14

    var string_before_last_slash = string.substring(0, start);
    console.log(string_before_last_slash);//o/p:- var1/var2

    var string_after_last_slash = string.substring(start+1, end);
    console.log(string_after_last_slash);//o/p:- var3

OU

    var string_after_last_slash = string.substring(start+1);
    console.log(string_after_last_slash);//o/p:- var3
Shailesh Sonare
la source
1

Jquery:

var afterDot = value.substr(value.lastIndexOf('_') + 1);

Javascript:

var myString = 'asd/f/df/xc/asd/test.jpg'
var parts    = myString.split('/');
var answer   = parts[parts.length - 1];
console.log(answer);

Remplacer «_» || '/' à votre propre besoin

SMPLYJR
la source
1

Comme requis dans la question:

var string1= "foo/bar/test.html";
  if(string1.contains("/"))
  {
      var string_parts = string1.split("/");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }  

et pour la question posée sur l'url (demandé pour une occurrence de '=') ::
[ http://stackoverflow.com/questions/24156535/how-to-split-a-string-after-a-particular-character-in -jquery] [1]

var string1= "Hello how are =you";
  if(string1.contains("="))
  {
      var string_parts = string1.split("=");
    var result = string_parts[string_parts.length - 1];
    console.log(result);
  }
Vishal Kumar
la source
0

Essaye ça:

const url = "files/images/gallery/image.jpg";

console.log(url.split("/").pop());

Patrycja Petryk
la source
Cette solution est déjà dans la réponse acceptée, comme troisième solution possible
β.εηοιτ.βε