Letztes URL-Segment mit JavaScript

Lesezeit: 3 Minuten

Benutzer-Avatar
oshirowanen

Wie erhalte ich das letzte Segment einer URL? Ich habe das folgende Skript, das die vollständige URL des angeklickten Anchor-Tags anzeigt:

$(".tag_name_goes_here").live('click', function(event)
{
    event.preventDefault();  
    alert($(this).attr("href"));
});

Wenn die URL ist

http://mywebsite/folder/file

Wie bekomme ich es dazu, nur den “Datei”-Teil der URL im Warnfeld anzuzeigen?

  • Bitte, Verwenden Sie keine naive Lösung das spaltet die href von /. EIN URL Teile hat gemäß der Pfad: die Suchparameter (nach ?) und das Fragment (nach #). Wenn Sie eine URL als Zeichenfolge haben, verwenden Sie new URL( die Saite ).pathname Erste. Wenn Sie nach der URL der aktuellen Seite suchen, verwenden Sie location.pathname. Dann benutzen .split("/") auf das Ergebnis. .filter(Boolean) entfernt leere Teile (zB nach abschließenden Schrägstrichen). .at(-1) (oder .pop() oder .slice(-1)[0]) erhält den letzten Teil des Pfads.

    – Sebastian Simon

    15. März um 22:08 Uhr

Benutzer-Avatar
Sebastian Bart

Die anderen Antworten funktionieren möglicherweise, wenn der Pfad einfach ist und nur aus einfachen Pfadelementen besteht. Aber wenn es enthält Parameter abfragen außerdem brechen sie.

Besser verwenden URL Objekt dafür, um stattdessen eine robustere Lösung zu erhalten. Es ist eine geparste Interpretation der vorliegenden URL:

Eingang:
const href="https://stackoverflow.com/boo?q=foo&s=bar"

const segments = new URL(href).pathname.split("https://stackoverflow.com/");
const last = segments.pop() || segments.pop(); // Handle potential trailing slash
console.log(last);

Ausgabe: 'boo'

Dies funktioniert für alle gängigen Browser. Nur unser Sterben IE unterstützt das nicht (und wird es nicht). Für IE gibt es eine Polyfills verfügbar, aber (wenn Sie Pflege überhaupt).

  • Falls jemand nicht grok was hier los ist: segments wird ein Array aller Pfade sein, also wenn Sie eine URL haben wie: https://a.com/b/c/d/?letters=true dann segments in diesem Beispiel ist gleich ['b', 'c', 'd', ''] weil der abschließende Schrägstrich nach d ergibt einen leeren String ''. Dann ist die last Variable sagt “nimm das letzte Element aus der segments Array und entfernen Sie es. Wenn dieses Element falsch ist, wiederholen Sie dasselbe” (logisches ODER), was zur Rückgabe führt d von meinem Beispiel hier.

    – maxhuty

    24. Februar um 12:11 Uhr


window.location.pathname.split("https://stackoverflow.com/").pop()

Benutzer-Avatar
Aman Silawat

Holen Sie sich das letzte Segment mit RegEx

str.replace(/.*\/(\w+)\/?$/, '$1');

$1 bedeutet, dass die einfangende Gruppe verwendet wird. Verwenden Sie in RegEx (\w+) die erste Gruppe, dann ersetzen Sie die gesamte Zeichenfolge durch die Erfassungsgruppe.

let str="http://mywebsite/folder/file";
let lastSegment = str.replace(/.*\/(\w+)\/?$/, '$1');
console.log(lastSegment);

Benutzer-Avatar
Franz Verona

Javascript hat die mit dem String-Objekt verknüpfte Funktion split, die Ihnen helfen kann:

var url = "http://mywebsite/folder/file";
var array = url.split("https://stackoverflow.com/");

var lastsegment = array[array.length-1];

Gibt das letzte Segment zurück, unabhängig von abschließenden Schrägstrichen:

var val="http://mywebsite/folder/file//".split("https://stackoverflow.com/").filter(Boolean).pop();

console.log(val);

  • Sie möchten wahrscheinlich verwenden path.sep kein wörtlicher Schrägstrich. Sehen nodejs.org/api/path.html#path_path_sep. Dadurch bleibt Ihr Code über Betriebssysteme hinweg portierbar.

    – Aaron

    17. Juni 2020 um 17:10 Uhr


  • Nette Idee, würde aber im Browser nicht mehr funktionieren

    – John Doherty

    17. Juni 2020 um 23:09 Uhr

  • guter Punkt. Ich sollte sagen, dass dies in Befehlszeilenskripten/serverseitigen nodejs bevorzugt wird.

    – Aaron

    20. Juni 2020 um 17:58 Uhr

1010690cookie-checkLetztes URL-Segment mit JavaScript

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy