Start · Sprachen · JavaScript · Referenz · URLPattern.test()

URLPattern.test()

Methode

Prüft, ob eine URL (als String oder als Objekt mit URL-Bestandteilen) zum <code>URLPattern</code> passt, und gibt <code>true</code> oder <code>false</code> zurück.

seit JavaScript Baseline 2025 (Chrome/Edge 95+, Firefox 142+, Safa Kategorie: webapi

Signatur

URLPattern.prototype.test(input, baseURL)

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

Typ
boolean
Beschreibung
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'));
true false

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'));
true false

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' }));
true false

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'));
artikel nicht-gefunden suche