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