Ruft den Wert einer Zeichenfolge nach einem Schrägstrich in JavaScript ab

112

Ich versuche es bereits seit über einer Stunde und kann nicht herausfinden, wie ich es richtig machen soll, obwohl es wahrscheinlich ziemlich einfach ist:

Ich habe so etwas: foo/bar/test.html

Ich möchte jQuery verwenden, um alles nach dem letzten zu extrahieren /. Im obigen Beispiel wäre die Ausgabe test.html.

Ich denke, es kann mit substrund gemacht werden indexOf(), aber ich kann keine funktionierende Lösung finden.

r0skar
quelle

Antworten:

243

Mindestens drei Möglichkeiten:

Ein regulärer Ausdruck:

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

... mit der Aufschrift "Nimm die Reihe von Zeichen, die keinen Schrägstrich enthalten" ( [^/]*) am Ende der Zeichenfolge ( $). Anschließend werden die übereinstimmenden Zeichen aus dem zurückgegebenen Übereinstimmungsobjekt abgerufen, indem sie in das Objekt indiziert werden ( [0]). In einem Übereinstimmungsobjekt ist der erste Eintrag die gesamte übereinstimmende Zeichenfolge. Keine Notwendigkeit für Erfassungsgruppen.

Live Beispiel

Verwenden von lastIndexOfund substring:

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

lastIndexOfmacht, wie es sich anhört: Es findet den Index des letzten Vorkommens eines Zeichens (nun, Zeichenfolge) in einer Zeichenfolge und gibt -1 zurück, wenn es nicht gefunden wird. Neun von zehn Fällen möchten Sie wahrscheinlich diesen Rückgabewert ( if (n !== -1)) überprüfen , aber da wir oben 1 hinzufügen und Teilzeichenfolge aufrufen, werden wir am Ende str.substring(0)nur den String zurückgeben.

Verwenden von Array#split

Sudhir und Tom Walters haben dies hier und hier behandelt , aber der Vollständigkeit halber:

var parts = "foo/bar/test.html".split("/");
var result = parts[parts.length - 1]; // Or parts.pop();

split teilt eine Zeichenfolge mit dem angegebenen Trennzeichen auf und gibt ein Array zurück.

Die lastIndexOf/ substring-Lösung ist wahrscheinlich die effizienteste (obwohl man immer vorsichtig sein muss, wenn man etwas über JavaScript und Leistung sagt, da sich die Engines so radikal voneinander unterscheiden), aber wenn Sie dies nicht tausende Male in einer Schleife tun, ist dies nicht der Fall Es spielt keine Rolle und ich würde mich um Klarheit des Codes bemühen.

TJ Crowder
quelle
1
Wie würden Sie dies anpassen, um die Zeichenfolge vor dem endgültigen Schrägstrich zurückzugeben? (
Dh
28

Sie benötigen jQuery nicht und es gibt eine Reihe von Möglichkeiten, dies zu tun, zum Beispiel:

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

Wo myString Ihre Zeichenfolge enthält.

Tom Walters
quelle
3
+1 (zum Arbeiten) weist darauf hin, dass jQuery nicht die Komplettlösung für Javascript-Probleme ist.
Andrew Jackman
1
Dies ist eine fehlerhafte Lösung. Versuchen Sie, was passiert, wenn Sie den Schrägstrich zur Schnecke hinzufügen? Es gibt 0 zurück. Und was passiert, wenn es keine Schnecke gibt? - gibt NaN zurück! wtf? schlechter Code
Donatas Cereska
1) Die Frage bezog sich auf eine Eingabe, die nicht null war. 2) Die Eingabe bezog sich auf Eingaben, die mit Dateinamen endeten (keine Schrägstriche). 3) Die akzeptierte Antwort ist in der Tat eine viel bessere Lösung, daher die zahlreichen Stimmen nach oben. 4) Sie können gerne Ihre eigene Lösung hinzufügen
Tom Walters
12
var str = "foo/bar/test.html";
var lastSlash = str.lastIndexOf("/");
alert(str.substring(lastSlash+1));
Kasdega
quelle
9

Versuchen;

var str = "foo / bar / test.html";
var tmp = str.split ("/");
alert (tmp.pop ());
Sudhir Bastakoti
quelle
5

Wenn ich weiß, dass die Saite einigermaßen kurz sein wird, verwende ich den folgenden Liner ... (Denken Sie daran, Backslashes zu vermeiden.)

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

Alarm erscheint mit picture name.jpg

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

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

Jetzt haben Sie die last.htm in der Pfadzeichenfolge .

Zar E Ahmer
quelle
1

leicht wiegen

string.substring(start,end)

wo

start = Required. Die Position, an der die Extraktion gestartet werden soll. Das erste Zeichen befindet sich am Index 0`.

end = Optional. Die Position (bis, aber nicht einschließlich), an der die Extraktion beendet werden soll. Wenn nicht angegeben, wird der Rest der Zeichenfolge extrahiert.

    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

ODER

    var string_after_last_slash = string.substring(start+1);
    console.log(string_after_last_slash);//o/p:- var3
Shailesh Sonare
quelle
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);

Ersetzen Sie '_' || '/' nach eigenem Bedarf

SMPLYJR
quelle
1

Wie in Frage :: gefordert

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

und für Fragen, die auf der URL gestellt wurden (nach einem Vorkommen von '=' gefragt) ::
[ 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
quelle
0

Versuche dies:

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

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

Patrycja Petryk
quelle
Diese Lösung ist bereits in der akzeptierten Antwort als dritte mögliche Lösung enthalten
β.εηοιτ.βε