URLPattern:test() 方法
注意:此功能在 Web Workers 中可用。
URLPattern 介面的 test() 方法接收一個 URL 字串或 URL 各部分組成的物件的輸入,並返回一個布林值,指示給定的輸入是否與當前模式匹配。
語法
test(input)
test(url)
test(url, baseURL)
引數
input-
提供 URL 各個部分的物件的。物件的成員可以是
protocol、username、password、hostname、port、pathname、search、hash或baseURL中的任何一個。 url-
定義絕對或相對 URL 的字串。如果是相對 URL,則還必須提供
baseURL,並且兩者必須解析為絕對 URL。如果輸入無法解析,或者提供了沒有 baseURL 的相對 URL,則該方法將返回false。 baseURL可選-
在
url是相對 URL 時使用的基礎 URL 的字串。如果未指定,則預設為undefined。如果提供但基礎 URL 無法解析,則該方法將返回false。
在某些情況下,未在 url/input 中指定的 URL 各部分可以 從基礎 URL 繼承。省略的部分被視為空字串。
返回值
一個 Boolean 值。
異常
描述
該方法在 URLPattern 物件上呼叫,指定一個字串格式的輸入 URL(可選帶基礎 URL),或一個包含每個 URL 部分屬性的物件。
如果測試 URL/輸入的所有部分都與模式的所有部分匹配,則該方法返回 true;如果任何部分不匹配,則返回 false。如果傳入了相對 url 但未指定 baseURL(無法解析絕對測試 URL),則該方法也返回 false。請注意,當傳遞 input 物件時,input.baseURL 始終是可選的。
從 BaseURL 繼承
比 url 中定義的最低具體部分更具體的 URL 各部分可以從 baseURL(或對於 input,從 input.baseURL)繼承。直觀地說,這意味著如果輸入中指定了 pathname 部分,則 URL 中其左側的部分可能從基礎 URL(protocol、hostname 和 port)繼承,而其右側的部分則可能不被繼承(search 和 hash)。username 和 password 永遠不會從基礎 URL 繼承。
有關更多資訊,請參閱 API 概述中的 從 BaseURL 繼承。
示例
示例展示瞭如何使用 test() 方法將 URL 與模式進行匹配。在每種情況下,test() 的結果都會列印到控制檯。
測試絕對 URL
首先,我們定義用於匹配 URL 的模式。此模式匹配以下 URL:協議為 http 或 https,是 .example.com 的子域名,並且路徑是 /books/ 後跟任意值。
const pattern = new URLPattern("http{s}?://*.example.com/books/:id");
接下來,我們匹配兩個絕對 URL 字串。第一個匹配成功,但第二個不匹配,因為測試 URL 不是 example.com 的子域名。
console.log(pattern.test("https://store.example.com/books/123")); // true
console.log(pattern.test("https://example.com/books/123")); // false
測試相對 URL
此示例使用與之前相同的模式來測試多個相對 URL。
const pattern = new URLPattern("http{s}?://*.example.com/books/:id");
接下來,我們匹配一些相對 URL。第一個情況匹配成功,因為解析後的 URL 是 https://store.example.com/books/123,而第二個不匹配,因為解析後的 URL 不是 example.com 的子域名。
console.log(pattern.test("/books/123", "http://store.example.com")); // true
console.log(pattern.test("/books/123", "http://example.com")); // false
此測試不匹配,因為提供的 URL 是相對的,並且沒有提供 baseURL。請注意,您可以定義一個僅匹配路徑名的測試,但需要使用物件輸入。
console.log(pattern.test("/books/123")); // false
此測試不匹配,因為基礎 URL 無效,並且與 /books/123 一起無法解析為絕對 URL。
console.log(pattern.test("/books/123", "data:text/plain,hello world!")); // false
測試 URL 物件
此示例使用與之前相同的模式來測試多個定義為結構化物件的 URL。
const pattern = new URLPattern("http{s}?://*.example.com/books/:id");
第一種情況匹配成功,因為它定義了與模式的每個部分完全匹配的內容。
console.log(
pattern.test({
protocol: "https",
hostname: "store.example.com",
pathname: "/books/123",
}),
); // true
在此程式碼中,存在 pathname,並且缺失的部分由 baseURL 提供。結果與之前的程式碼相同。
console.log(
pattern.test({
pathname: "/books/123",
baseURL: "http://store.example.com",
}),
); // true
此結構化 URL 與模式不匹配,因為協議是 file(而不是 https 或 http)。
console.log(
pattern.test({
protocol: "file",
hostname: "store.example.com",
pathname: "/books/123",
}),
); // false
規範
| 規範 |
|---|
| URL 模式 # dom-urlpattern-test |
瀏覽器相容性
載入中…
另見
- 在 GitHub 上提供了
URLPattern的 polyfill