Regex para URL
Encontre endereços web em um texto com um padrão curto e veja exatamente onde ele para antes de colocá-lo no código.
Regex para URL
Tirar links de logs, exportações de chat ou texto raspado da web é trabalho para uma expressão regular, e o padrão deve ser curto o bastante para ser lido. Esta página abre o Testador de Regex com o padrão URL (http/https) da Biblioteca de padrões, https?:\/\/[^\s/$.?#][^\s]*, com as flags gi.
Como ler o padrão
| Parte | Significado |
|---|---|
https? | http, com um s opcional |
:\/\/ | Os dois-pontos e as duas barras, escapadas para que o padrão também funcione entre barras no código |
[^\s/$.?#] | O primeiro caractere do nome de host: qualquer um, menos espaço, barra, cifrão, ponto, interrogação ou cerquilha |
[^\s]* | Todo o resto até o próximo espaço |
gi | Encontra todos os links, em maiúsculas ou minúsculas |
O que ela pega e o que deixa passar
| Texto | Resultado |
|---|---|
https://logicutil.com/tool/regex-tester | O endereço inteiro |
http://example.org/page?q=1#top | O endereço inteiro, com query e fragmento |
http://localhost:8080/x | O endereço inteiro, com a porta |
HTTPS://EXAMPLE.COM/X | Casa, por causa da flag i |
https://例子.测试/路径 | Casa: domínios e caminhos não latinos são mantidos |
Visit https://example.com. | https://example.com., com o ponto final |
(https://example.com/a) | https://example.com/a), com o parêntese |
www.example.com | Nenhuma correspondência: não há esquema |
ftp://files.example.com | Nenhuma correspondência: só http e https |
Uma versão mais rígida
Para deixar a pontuação final de fora, termine a correspondência com um lookahead: https?:\/\/[^\s/$.?#][^\s]*?(?=[\].,;:!?)]*(?:\s|$)). Ele pega o trecho mais curto seguido apenas de pontuação e depois de um espaço ou do fim do texto, então Visit https://example.com. dá https://example.com e (https://example.com/a) dá https://example.com/a. O preço é que um link que realmente termina em parêntese, como alguns endereços da Wikipedia, perde esse parêntese.
Encontrar links não é validá-los
Um padrão como este responde "este texto contém algo que parece um link?", e não "este é um endereço que funciona?". Para um único valor em JavaScript, new URL(value) é mais rígido: ele lança uma exceção com https:// sem nenhum host. Use a regex para encontrar candidatos no texto e deixe new URL() ou o seu servidor decidir.
Páginas relacionadas
Transforme os links encontrados em Markdown com [$&]($&) na página de localizar e substituir com regex, e veja como as flags se comportam no testador de regex JavaScript. Endereços de e-mail têm armadilhas próprias, tratadas no guia de regex para e-mail.