Obtenir la valeur d'une chaîne de caractères après un slash dans JavaScript

je suis déjà en train d'essayer pendant plus d'une heure et ne peux pas trouver la bonne façon de le faire, bien que ce soit probablement assez facile:

j'ai quelque chose comme ceci: foo/bar/test.html

je voudrais utiliser jQuery pour extraire tout 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 peux pas trouver une solution de travail.

76
demandé sur Saravanan 2011-12-04 19:59:41

9 réponses

au moins trois façons:

Une expression régulière:

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

...qui dit "saisir la série de caractères ne contenant une barre oblique" ( [^/]* ) à la fin de la chaîne ( $ ). Ensuite, il saisit les caractères appariés de l'objet match retourné en y indexant ( [0] ); dans un objet match, la première entrée est la chaîne entière appariée. Pas besoin de capturer des groupes.

Exemple en direct

utilisant lastIndexOf et substring :

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

lastIndexOf fait ce qu'il semble faire: il trouve l'index du dernier occurrence d'un caractère (bien, chaîne) dans une chaîne, en retournant -1 si pas trouvé. Neuf fois sur dix vous voulez probablement vérifier cette valeur de retour ( if (n !== -1) ), mais dans le ci-dessus puisque nous ajoutons 1 à elle et l'appel sous-couche, on finirait par faire str.substring(0) qui renvoie juste la chaîne.

utilisant Array#split

Sudhir et Tom Walters ont ceci couvert ici et ici , mais juste pour l'exhaustivité:

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, renvoyant un tableau.

la solution lastIndexOf / substring est probablement le plus efficace (bien qu'on doive toujours être prudent en disant quoi que ce soit au sujet de JavaScript et de performance, puisque les moteurs varient si radicalement l'un de l'autre), mais à moins que vous ne le fassiez des milliers de fois dans une boucle, il n'a pas d'importance et je m'efforcerais pour la clarté du code.

161
répondu T.J. Crowder 2017-05-23 11:33:13

Vous n'avez pas besoin de jQuery, et il y a des tas de façons de le faire, par exemple:

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

où myString contient votre chaîne.

21
répondu Tom Walters 2011-12-04 16:02:40
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));
8
répondu kasdega 2011-12-04 16:04:27

Essayer;

var str = "foo/bar/test.html";
var tmp = str.split("/");
alert(tmp.pop());
5
répondu Sudhir Bastakoti 2011-12-04 16:01:09
String path ="AnyDirectory/subFolder/last.htm";
int pos = path.lastIndexOf("/") + 1;

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

Maintenant vous avez le dernier .htm dans la chaîne path.

2
répondu Xar E Ahmer 2015-12-08 05:14:45

quand je sais que la corde va être assez courte, alors j'utilise la doublure suivante... (n'oubliez pas de 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
répondu DaveAlger 2012-08-08 17:44:24

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 sans inclure) où mettre fin à l'extraction. Si elle est omise, elle 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
répondu Shailesh Sonare 2016-04-11 08:29:44

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 " _ '/ / ' / ' / 'selon vos besoins

0
répondu S. Domeng 2016-12-05 01:34:41

, Comme 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 url (demandé pour une occurrence de '=' )::

[ /q/comment-à-split-une-chaîne-après-un-particulier-caractère-en-jquery-dupliquer-11072/"Bonjour comment allez - =vous"; si(chaîne1.contenir="(")) { var string_parts = string1.Split="("); var résultat = string_parts[string_parts.longueur - 1]; console.journal(suite); }

0
répondu Vishal Kumar 2017-11-27 21:03:45