web-dev-qa-db-fra.com

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

J'essaie déjà depuis plus d'une heure et je ne peux 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 substr et indexOf(), mais je ne trouve pas de solution de travail.

94
r0skar

Au moins trois façons:

Une expression régulière:

var result = /[^/]*$/.exec("foo/bar/test.html")[0];

... qui dit "attrape 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 correspondant retourné en y indexant ([0]); dans un objet match, la première entrée est la chaîne correspondante. Pas besoin de groupes de capture.

Exemple en direct

Utiliser lastIndexOf et substring:

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

lastIndexOf fait ce que cela ressemble: il trouve l'indice de l'occurrence de la dernière d'un caractère (bien, chaîne) dans une chaîne, retournant -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 que nous appelons une sous-chaîne, nous finirions par faire str.substring(0) qui renvoie la chaîne.

Utiliser Array#split

Sudhir et Tom Walters ont ceci 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é et renvoie un tableau.

La solution lastIndexOf/substring est probablement la plus efficace (bien qu'il faille toujours faire très attention en matière de JavaScript et de performances, car les moteurs varient considérablement de les uns des autres), mais à moins que vous ne fassiez cela des milliers de fois en boucle, cela n'a pas d'importance et je m'efforcerais d'obtenir un code plus clair.

203
T.J. Crowder

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.

24
Tom Walters
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));
10
kasdega

Essayer;

 var str = "foo/bar/test.html"; 
 var tmp = str.split ("/");
 alert (tmp.pop ()); 
5
Sudhir Bastakoti
String path ="AnyDirectory/subFolder/last.htm";
int pos = path.lastIndexOf("/") + 1;

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

Maintenant, vous avez le last.htm dans la chaîne de chemin.

2
Xar E Ahmer

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ù mettre fin à l'extraction. Si 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

OR

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

Quand je sais que la chaîne va être raisonnablement courte, j'utilise la doublure suivante ... (n'oubliez pas d'échapper aux barres obliques inverses)

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

alerte apparaît avec picture name.jpg

1
DaveAlger

Comme requis dans 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 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);
  }
1
Vishal Kumar

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 '_' || '/' à vos propres besoins

1
S. Domeng