URLPattern:test() 方法

基準線 2025
新推出

自 ⁨2025 年 9 月⁩起,此功能適用於最新裝置和瀏覽器版本。此功能可能不適用於較舊的裝置或瀏覽器。

注意:此功能在 Web Workers 中可用。

URLPattern 介面的 test() 方法接收一個 URL 字串或 URL 各部分組成的物件的輸入,並返回一個布林值,指示給定的輸入是否與當前模式匹配。

語法

js
test(input)
test(url)
test(url, baseURL)

引數

input

提供 URL 各個部分的物件的。物件的成員可以是 protocolusernamepasswordhostnameportpathnamesearchhashbaseURL 中的任何一個。

url

定義絕對或相對 URL 的字串。如果是相對 URL,則還必須提供 baseURL,並且兩者必須解析為絕對 URL。如果輸入無法解析,或者提供了沒有 baseURL 的相對 URL,則該方法將返回 false

baseURL 可選

url 是相對 URL 時使用的基礎 URL 的字串。如果未指定,則預設為 undefined。如果提供但基礎 URL 無法解析,則該方法將返回 false

在某些情況下,未在 url/input 中指定的 URL 各部分可以 從基礎 URL 繼承。省略的部分被視為空字串。

返回值

一個 Boolean 值。

異常

TypeError

表示當傳遞 input 物件時,提供了 baseURL(它只應與 url 字串一起傳遞)。

描述

該方法在 URLPattern 物件上呼叫,指定一個字串格式的輸入 URL(可選帶基礎 URL),或一個包含每個 URL 部分屬性的物件。

如果測試 URL/輸入的​​所有部分都與模式的所有部分匹配,則該方法返回 true;如果任何部分不匹配,則返回 false。如果傳入了相對 url 但未指定 baseURL(無法解析絕對測試 URL),則該方法也返回 false。請注意,當傳遞 input 物件時,input.baseURL 始終是可選的。

從 BaseURL 繼承

url 中定義的最低具體部分更具體的 URL 各部分可以從 baseURL(或對於 input,從 input.baseURL)繼承。直觀地說,這意味著如果輸入中指定了 pathname 部分,則 URL 中其左側的部分可能從基礎 URL(protocolhostnameport)繼承,而其右側的部分則可能不被繼承(searchhash)。usernamepassword 永遠不會從基礎 URL 繼承。

有關更多資訊,請參閱 API 概述中的 從 BaseURL 繼承

示例

示例展示瞭如何使用 test() 方法將 URL 與模式進行匹配。在每種情況下,test() 的結果都會列印到控制檯。

測試絕對 URL

首先,我們定義用於匹配 URL 的模式。此模式匹配以下 URL:協議為 httphttps,是 .example.com 的子域名,並且路徑是 /books/ 後跟任意值。

js
const pattern = new URLPattern("http{s}?://*.example.com/books/:id");

接下來,我們匹配兩個絕對 URL 字串。第一個匹配成功,但第二個不匹配,因為測試 URL 不是 example.com 的子域名。

js
console.log(pattern.test("https://store.example.com/books/123")); // true
console.log(pattern.test("https://example.com/books/123")); // false

測試相對 URL

此示例使用與之前相同的模式來測試多個相對 URL。

js
const pattern = new URLPattern("http{s}?://*.example.com/books/:id");

接下來,我們匹配一些相對 URL。第一個情況匹配成功,因為解析後的 URL 是 https://store.example.com/books/123,而第二個不匹配,因為解析後的 URL 不是 example.com 的子域名。

js
console.log(pattern.test("/books/123", "http://store.example.com")); // true
console.log(pattern.test("/books/123", "http://example.com")); // false

此測試不匹配,因為提供的 URL 是相對的,並且沒有提供 baseURL。請注意,您可以定義一個僅匹配路徑名的測試,但需要使用物件輸入。

js
console.log(pattern.test("/books/123")); // false

此測試不匹配,因為基礎 URL 無效,並且與 /books/123 一起無法解析為絕對 URL。

js
console.log(pattern.test("/books/123", "data:text/plain,hello world!")); // false

測試 URL 物件

此示例使用與之前相同的模式來測試多個定義為結構化物件的 URL。

js
const pattern = new URLPattern("http{s}?://*.example.com/books/:id");

第一種情況匹配成功,因為它定義了與模式的每個部分完全匹配的內容。

js
console.log(
  pattern.test({
    protocol: "https",
    hostname: "store.example.com",
    pathname: "/books/123",
  }),
); // true

在此程式碼中,存在 pathname,並且缺失的部分由 baseURL 提供。結果與之前的程式碼相同。

js
console.log(
  pattern.test({
    pathname: "/books/123",
    baseURL: "http://store.example.com",
  }),
); // true

此結構化 URL 與模式不匹配,因為協議是 file(而不是 httpshttp)。

js
console.log(
  pattern.test({
    protocol: "file",
    hostname: "store.example.com",
    pathname: "/books/123",
  }),
); // false

規範

規範
URL 模式
# dom-urlpattern-test

瀏覽器相容性

另見