# URLPattern

A interface `URLPattern` do Azion Runtime compara uma URL, ou partes de uma URL, com um padrão. Um padrão pode conter grupos de captura que extraem partes da URL correspondente, como o ID em um path. Para mais informações, consulte [URLPattern](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern) no MDN Web Docs.

> **nota**
>
> Com `azion dev`, `hasRegExpGroups` é `undefined`. O construtor, as outras propriedades e os dois métodos retornam os mesmos valores localmente e após o deploy.

---

## Construtor

```javascript
new URLPattern(input, baseURL)
```

[`URLPattern()`](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern/URLPattern) retorna um objeto `URLPattern` criado a partir do padrão e da URL base que você informa:

| Parâmetro | Tipo             | Descrição                                                                                                                                                                                                |
| --------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `input`   | Object ou string | O padrão. Um objeto recebe um padrão por componente da URL, como `{ pathname: '/users/:id' }`. Uma string recebe o padrão como uma string de URL, como `/books/:isbn`, resolvida em relação a `baseURL`. |
| `baseURL` | String           | URL base para uma string de padrão relativa, como `https://example.com`.                                                                                                                                 |

Com uma URL base, os componentes que a string omite vêm da URL base: `new URLPattern('/books/:isbn', 'https://example.com')` tem o `protocol` `https`, o `hostname` `example.com` e o `pathname` `/books/:isbn`.

Um padrão aceita grupos nomeados como `:id`, curingas (`*`), partes opcionais entre chaves como `http{s}?` e uma expressão regular após o nome de um grupo, como `:name(\d+)`.

---

## Propriedades

Cada propriedade de componente retorna o padrão desse componente, como você o informou. Um componente que você define como string vazia, como `port`, retorna uma string vazia.

| Propriedade                                                                        | Tipo    | Descrição                                                                        |
| ---------------------------------------------------------------------------------- | ------- | -------------------------------------------------------------------------------- |
| `hash`                                                                             | String  | Padrão que corresponde à parte hash de uma URL.                                  |
| [`hostname`](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern/hostname) | String  | Padrão que corresponde à parte hostname de uma URL, como `{*.}?example.com`.     |
| [`password`](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern/password) | String  | Padrão que corresponde à parte password de uma URL.                              |
| [`pathname`](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern/pathname) | String  | Padrão que corresponde à parte pathname de uma URL, como `/api/*`.               |
| [`port`](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern/port)         | String  | Padrão que corresponde à parte port de uma URL.                                  |
| [`protocol`](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern/protocol) | String  | Padrão que corresponde à parte protocol de uma URL, como `http{s}?`.             |
| [`search`](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern/search)     | String  | Padrão que corresponde à parte search de uma URL, como `q=:q`.                   |
| [`username`](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern/username) | String  | Padrão que corresponde à parte username de uma URL.                              |
| `hasRegExpGroups`                                                                  | Boolean | `true` para um padrão que contém um grupo de expressão regular, como `/a/(\d+)`. |

---

## Métodos

| Método                                                                                    | Descrição                                                                                                                                                                                 |
| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`pattern.exec(input)`](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern/exec) | Retorna um objeto com as partes correspondentes da URL, ou `null` quando a URL não corresponde. Cada componente do resultado, como `pathname`, carrega os valores capturados em `groups`. |
| [`pattern.test(input)`](https://developer.mozilla.org/en-US/docs/Web/API/URLPattern/test) | Retorna `true` quando a URL corresponde ao padrão e `false` quando não corresponde.                                                                                                       |

Os dois métodos recebem uma string de URL. `exec()` também recebe um objeto de componentes da URL: para o padrão `{ pathname: '/files/:name(\\d+).:ext' }`, `exec({ pathname: '/files/12.png' })` retorna os grupos de `pathname` `{ name: '12', ext: 'png' }`.

---

## Exemplo

Este handler compara duas URLs com um padrão de pathname que tem um grupo nomeado e retorna os resultados de `test()` e `exec()` com `Response.json()`:

```javascript
export default {
  async fetch(request, env, ctx) {
    const pattern = new URLPattern({ pathname: '/users/:id' });
    return Response.json({
      test: pattern.test('https://example.com/users/42'),
      group: pattern.exec('https://example.com/users/42')?.pathname.groups,
      miss: pattern.exec('https://example.com/posts/1'),
    });
  },
};
```

A function retorna estes valores. O grupo `id` captura `42`, e `exec()` retorna `null` para a URL que não corresponde:

```json
{
 "test": true,
 "group": {
  "id": "42"
 },
 "miss": null
}
```

---

## Recursos relacionados

- [Request](/pt-br/documentacao/devtools/runtime/api-reference/request.md): A requisição recebida, cuja URL uma function pode comparar com um padrão.
- [Response](/pt-br/documentacao/devtools/runtime/api-reference/response.md): Como uma function cria a resposta que retorna, como o exemplo faz com `Response.json()`.
- [Handlers](/pt-br/documentacao/devtools/runtime/api-reference/handlers.md): Os formatos de handler que uma function exporta para receber requisições.
- [Web APIs](/pt-br/documentacao/devtools/runtime/api-reference/javascript.md): As outras Web APIs que o Azion Runtime suporta.
