Regex para URL
Encuentre direcciones web en un texto con un patrón corto y vea exactamente dónde se detiene antes de ponerlo en su código.
Regex para URL
Extraer enlaces de logs, exportaciones de chats o texto extraído de la web es tarea de una expresión regular, y el patrón debería ser lo bastante corto para leerlo. Esta página abre el Probador de Regex con el patrón URL (http/https) de la Biblioteca de patrones, https?:\/\/[^\s/$.?#][^\s]*, con las banderas gi.
Cómo se lee el patrón
| Parte | Significado |
|---|---|
https? | http, con una s opcional |
:\/\/ | Los dos puntos y las dos barras, escapadas para que el patrón también funcione entre barras en el código |
[^\s/$.?#] | El primer carácter del nombre de host: cualquiera salvo espacio, barra, signo de dólar, punto, interrogación o almohadilla |
[^\s]* | Todo lo demás hasta el siguiente espacio |
gi | Encuentra todos los enlaces, en mayúsculas o minúsculas |
Qué detecta y qué se le escapa
| Texto | Resultado |
|---|---|
https://logicutil.com/tool/regex-tester | La dirección completa |
http://example.org/page?q=1#top | La dirección completa, con la consulta y el fragmento |
http://localhost:8080/x | La dirección completa, con el puerto |
HTTPS://EXAMPLE.COM/X | Coincide, gracias a la bandera i |
https://例子.测试/路径 | Coincide: se conservan los dominios y las rutas no latinos |
Visit https://example.com. | https://example.com., con el punto |
(https://example.com/a) | https://example.com/a), con el paréntesis |
www.example.com | Sin coincidencia: no hay esquema |
ftp://files.example.com | Sin coincidencia: solo http y https |
Una versión más estricta
Para dejar fuera la puntuación final, termine la coincidencia con un lookahead: https?:\/\/[^\s/$.?#][^\s]*?(?=[\].,;:!?)]*(?:\s|$)). Toma el tramo más corto al que solo siguen signos de puntuación y después un espacio o el final del texto, así que Visit https://example.com. da https://example.com y (https://example.com/a) da https://example.com/a. El precio es que un enlace que de verdad termina en paréntesis, como algunas direcciones de Wikipedia, lo pierde.
Encontrar enlaces no es validarlos
Un patrón como este responde a "¿contiene este texto algo que parece un enlace?", no a "¿es esta una dirección que funciona?". Para un solo valor en JavaScript, new URL(value) es más estricto: lanza una excepción con https:// sin ningún host. Use la regex para encontrar candidatos en el texto y deje que new URL() o su servidor decidan.
Páginas relacionadas
Convierta los enlaces encontrados en Markdown con [$&]($&) en la página de buscar y reemplazar con regex, y vea cómo se comportan las banderas en el probador de regex JavaScript. Las direcciones de correo tienen sus propias trampas, tratadas en la guía de regex para email.