Signatur
Beschreibung
Die Eigenschaft hash eines URLPattern-Objekts liefert das Teilmuster für das Fragment einer URL, also den Teil nach dem #. Der Wert wird ohne führendes # zurückgegeben und enthält die Mustersyntax von URLPattern: benannte Gruppen wie :abschnitt, Platzhalter *, optionale Teile {…}? oder reguläre Ausdrücke in Klammern (\\d+).
Wurde beim Erzeugen kein Hash-Muster angegeben – etwa bei new URLPattern({ pathname: "/docs/*" }) –, ist der Wert "*": Das Fragment wird dann beliebig akzeptiert. Beim Konstruktor mit Zeichenkette (new URLPattern("https://example.com/seite#:id")) wird das Hash-Muster aus dem Text nach # gebildet.
Nützlich ist hash vor allem zur Inspektion und Fehlersuche: Man sieht, wie der Browser das übergebene Muster normalisiert hat (z. B. Prozentkodierung von Sonderzeichen). Für das eigentliche Auslesen von Werten aus einer konkreten URL verwendet man dagegen exec() und dort result.hash.groups.
Rückgabewert
#. Standardwert "*", wenn kein Hash-Muster angegeben wurde.Beispiele
Hash-Muster aus einem Objekt-Init auslesen
const pattern = new URLPattern({ pathname: "/handbuch", hash: "kapitel-:nr" });
console.log(pattern.hash);
console.log(pattern.pathname);
console.log(pattern.search); // nicht angegeben → Platzhalter
Standardwert und String-Konstruktor
const ohneHash = new URLPattern({ pathname: "/docs/*" });
console.log(ohneHash.hash);
const ausString = new URLPattern("https://example.com/hilfe#faq-*");
console.log(ausString.hash);
Praxis: Sprungmarke einer URL per exec() auswerten
// Einfaches Hash-Routing für eine Single-Page-Anwendung
const route = new URLPattern({ hash: "/artikel/:id(\\d+)" });
console.log("Muster:", route.hash);
const treffer = route.exec("https://example.com/app#/artikel/42");
if (treffer) {
console.log("Artikel-ID:", treffer.hash.groups.id);
console.log("Eingabe:", treffer.hash.input);
}
console.log(route.test("https://example.com/app#/artikel/abc"));
Schreibschutz der Eigenschaft
"use strict";
const pattern = new URLPattern({ hash: "top" });
try {
pattern.hash = "bottom"; // nur Getter vorhanden
} catch (err) {
console.log(err.name);
}
console.log(pattern.hash);
// Wichtig · Fallstricke
- Schreibgeschützt: Es gibt nur einen Getter. Zuweisungen werden im nicht-strikten Modus stillschweigend ignoriert und lösen im strikten Modus einen
TypeErroraus. Für ein anderes Muster muss ein neuesURLPatternerzeugt werden. - Kein führendes
#: Der zurückgegebene Wert enthält das Rautezeichen nicht. Ein im Objekt-Init angegebenes führendes#wird entfernt. - Normalisierung: Der Wert kann vom Eingabetext abweichen, z. B. werden Nicht-ASCII-Zeichen und Leerzeichen prozentkodiert. Vergleiche daher nicht blind mit dem Originalstring.
- Groß-/Kleinschreibung: Standardmäßig wird case-sensitiv verglichen; mit der Option
{ ignoreCase: true }im Konstruktor lässt sich das ändern. - Standardwert
"*": Fehlt ein Hash-Muster, passt jedes Fragment – auch ein leeres. Wer URLs ohne Fragment erzwingen will, musshash: ""explizit angeben. - Kompatibilität: In Chromium seit Version 95, in Firefox (142) und Safari (26) erst seit 2025. Für ältere Browser gibt es das Polyfill
urlpattern-polyfill; in Node.js istURLPatternab 23.8 global verfügbar.