Ich versuche, die folgende Aktion für eine Zeichenfolge auszuführen:
- finde das letzte Vorkommen des Charakters
"/"
; - entferne alles vor diesem Zeichen;
- Geben Sie die Reste der Zeichenfolge zurück.
Nehmen wir an, ich habe die folgende Zeichenfolge:
var string = "/Roland/index.php"; // Which is a result of window.location.pathname
Was ich jetzt herausziehen muss, ist alles außer der eigentlichen Seite, so etwas in der Art:
var result = "index.php" // Which is what I need to be returned
Das ist natürlich nur ein Beispiel, denn natürlich werde ich verschiedene Seiten haben, aber es gelten die gleichen Prinzipien.
Ich fragte mich, ob mir jemand bei einer Lösung helfen könnte. Ich habe die nächsten Aktionen ausprobiert, aber ohne Erfolg:
var location = window.location.pathname;
var result = location.substring(location.lastIndexOf["/"]);
javascript
Roland
quelle
quelle
lastIndexOf
ist eine Funktion und kann nicht überschrieben werden,location
wenn es sich um eine globale Variable handelt. So sollte es sein:loc.substring(loc.lastIndexOf("/"))
und da Sie den Schrägstrich selbst nicht einfügen möchten :loc.substring(loc.lastIndexOf("/") + 1)
.Antworten:
Sie haben die richtige Idee, ersetzen Sie einfach die Klammern durch Klammern.
var string = "/Roland/index.php"; var result = string.substring(string.lastIndexOf("/") + 1);
Hier ist ein Beispiel in jsfiddle und hier eine Erklärung der .lastIndexOf () -Methode im Mozilla Developer Network .
quelle
location.substring(location.lastIndexOf("/") + 1)
.0
dort, das das Gegenteil von dem tun würde, was ich brauche :)Persönlich würde ich einen regulären Ausdruck verwenden:
var result = string.replace(/^.*\/(.*)$/, "$1");
Wenn Sie mit regulären Ausdrücken vertraut sind (und Sie sollten es sein, wenn nicht :-), dann sieht es nicht so fremd aus wie wenn sie nicht vertraut sind.
Der führende
^
erzwingt diesen regulären Ausdruck, um die Übereinstimmung am Anfang der Zeichenfolge zu "verankern". Das\/
entspricht einem einzelnen/
Zeichen (das\
soll verhindern, dass der/
Parser für reguläre Ausdrücke verwirrt wird). Dann(.*)$
passt alles andere von der/
bis zum Ende des Strings. Die Initiale.*
wird so viel wie möglich verschluckt, einschließlich der/
Zeichen vor der letzten. Der Ersatztext"$1"
ist ein spezielles Formular, das "den Inhalt der ersten übereinstimmenden Gruppe" bedeutet. Diese Regex hat eine Gruppe, die durch die Klammern um das letzte.*
(in(.*)$
) gebildet wird. Das wird alles nach dem letzten sein/
Das Gesamtergebnis ist also, dass die gesamte Zeichenfolge durch genau dieses Zeug ersetzt wird. (Wenn das Muster nicht übereinstimmt, weil keine/
Zeichen vorhanden sind, geschieht nichts.)quelle
Teilen Sie den String in ein Array auf
/
und.pop()
neben dem letzten Element. Beachten Sie, dass Sie zuerst einen abschließenden Schrägstrich entfernen müssen, falls vorhanden.var locationstring = window.location.pathname; // replace() the trailing / with nothing, split on the remaining /, and pop off the last one console.log(locationstring.replace(/\/$/, "").split('/').pop());
Wenn im Fall einer URL wie der,
/path/stuff/here/
in der Sie das Trailing haben/
, in diesem Fall eine leere Zeichenfolge zurückgegeben werden sollhere
, ändern Sie die obigen Angaben, um die.replace()
aus der Aufrufkette zu entfernen . Ich nahm an, dass Sie die letzte Komponente unabhängig von einem abschließenden Schrägstrich möchten, aber möglicherweise falsch angenommen haben.console.log(locationstring.split('/').pop());
quelle
.pop()
:)var result = /\/([^\/]*)$/.exec(location)[1]; //"remove-everything-before-the-last-occurrence-of-a-character#10767835"
Hinweis:
location
Hier ist diewindow.location
, nicht Ihrevar location
.quelle
var string = "/Roland/index.php"; var result = string.substring(0, string.lastIndexOf("/") + 0);
quelle