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

浏览器兼容性

另见