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.

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.


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.


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

9

Essayer;

var str = "toto / bar / test.html";
var tmp = str.split ("/");
alert (tmp.pop ());

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


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.


1

poids léger

string.substring(start,end)

où

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

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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.