Signatur
Beschreibung
Mit test() prüfen Sie schnell, ob eine URL zu einem vorher angelegten URLPattern passt. Die Methode gibt nur einen Wahrheitswert zurück und eignet sich daher für Routing-Entscheidungen, zum Filtern von Anfragen im Service Worker oder für Zugriffsregeln, etwa „gehört diese URL zur API?“.
Als Eingabe dient entweder ein URL-String, optional mit einer Basis-URL für relative Pfade, oder ein Objekt mit einzelnen URL-Bestandteilen (protocol, hostname, pathname, search, hash usw.). Jeder Bestandteil wird gegen den passenden Teil des Musters geprüft. Das Ergebnis ist nur dann true, wenn alle Bestandteile passen.
Wenn Sie zusätzlich die gefundenen Werte brauchen, etwa den Wert von :id, verwenden Sie stattdessen URLPattern.prototype.exec(). Diese Methode liefert ein Ergebnisobjekt mit den benannten Gruppen oder null. test() ist das leichtgewichtige Gegenstück, wenn Ihnen „passt / passt nicht“ reicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $input | string | URLPatternInit | {} | Die zu prüfende URL: entweder als absoluter oder relativer URL-String oder als Objekt mit URL-Bestandteilen wie { hostname, pathname, search }. |
| $baseURL | string | Basis-URL, mit der ein relativer input-String aufgelöst wird. Nur erlaubt, wenn input ein String ist. |
Rückgabewert
true, wenn alle Bestandteile der Eingabe zum Muster passen, sonst false. Auch bei einer URL, die sich nicht auflösen lässt (z. B. ein relativer Pfad ohne baseURL), wird false zurückgegeben.Beispiele
Pfad mit benanntem Parameter prüfen
const produktSeite = new URLPattern({ pathname: '/produkte/:id' });
console.log(produktSeite.test('https://shop.example.com/produkte/42'));
console.log(produktSeite.test('https://shop.example.com/kategorien/42'));
Relative URL mit Basis-URL auflösen
const apiMuster = new URLPattern({ pathname: '/api/*' });
// Relativer Pfad wird mit der Basis-URL aufgelöst
console.log(apiMuster.test('/api/benutzer', 'https://example.com'));
// Ohne Basis-URL ist '/api/benutzer' keine gültige URL, das Ergebnis ist false
console.log(apiMuster.test('/api/benutzer'));
Eingabe als Objekt mit URL-Bestandteilen
const blogMuster = new URLPattern({
hostname: '{*.}?example.com',
pathname: '/blog/:slug',
});
console.log(blogMuster.test({ hostname: 'www.example.com', pathname: '/blog/hallo-welt' }));
console.log(blogMuster.test({ hostname: 'example.org', pathname: '/blog/hallo-welt' }));
Einfacher Router mit find() und test()
const routen = [
{ name: 'startseite', muster: new URLPattern({ pathname: '/' }) },
{ name: 'artikel', muster: new URLPattern({ pathname: '/artikel/:id(\\d+)' }) },
{ name: 'suche', muster: new URLPattern({ pathname: '/suche', search: 'q=*' }) },
];
const findeRoute = (url) =>
routen.find(({ muster }) => muster.test(url))?.name ?? 'nicht-gefunden';
console.log(findeRoute('https://example.com/artikel/123'));
console.log(findeRoute('https://example.com/artikel/abc'));
console.log(findeRoute('https://example.com/suche?q=javascript'));