Por qué merece la pena aprender regex
Las expresiones regulares te permiten localizar, extraer y sustituir patrones de texto con una sola línea de código. En cuanto dominas la sintaxis básica, escribes mucho menos código propio para analizar cadenas y usas grep, sed y el buscar y reemplazar de tu editor con muchísima más precisión.
La sintaxis esencial en 2 minutos
.: cualquier carácter (menos el salto de línea)*: cero o más veces lo anterior+: una o más veces lo anterior?: cero o una vez (hace opcional lo anterior)^: principio de la cadena (o de la línea en modo multilínea)$: final de la cadena (o de la línea en modo multilínea)[abc]: clase de caracteres, es decir a, b o c[^abc]: clase negada, cualquier cosa menos a, b o c(grupo): grupo de captura(?:grupo): grupo sin capturaa|b: alternancia, a o b\d: dígito [0-9]\w: carácter de palabra [a-zA-Z0-9_]\s: espacio en blanco{n,m}: entre n y m repeticiones
Los 20 patrones
**1. Dirección de correo**
[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}
**2. URL (http o https)**
https?://[^\s<>"{}|\\^]+
**3. Dirección IPv4**
\b(?:\d{1,3}\.){3}\d{1,3}\b
**4. Dirección IPv6 (comprimida)**
([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}
**5. Color hexadecimal**
#(?:[0-9a-fA-F]{3}){1,2}\b
**6. Número de teléfono (formato estadounidense)**
(?:\+1)?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}
**7. Fecha (AAAA-MM-DD)**
\b\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])\b
**8. Hora (HH:MM o HH:MM:SS)**
\b([01]\d|2[0-3]):[0-5]\d(:[0-5]\d)?\b
**9. Número de tarjeta de crédito**
\b(?:\d{4}[\s-]?){3}\d{4}\b
**10. Código postal (formato estadounidense)**
\b\d{5}(?:-\d{4})?\b
**11. Versión semántica**
\bv?\d+\.\d+\.\d+(?:-[\w.]+)?\b
**12. Etiqueta HTML**
<[^>]+>
**13. Comentario HTML**
<!--[\s\S]*?-->
**14. Clase CSS**
\.([a-zA-Z_][\w-]*)
**15. Nombre de variable de JavaScript**
\b(?:const|let|var)\s+([a-zA-Z_$][\w$]*)
**16. Encabezado de Markdown**
^#{1,6}\s+(.+)$ (con la marca de multilínea activada)
**17. Valor de cadena en JSON**
"([^"\\]|\\.)*"
**18. Importe en dólares**
\$\d{1,3}(?:,\d{3})*(?:\.\d{2})?
**19. Nivel de registro**
\b(DEBUG|INFO|WARN(?:ING)?|ERROR|CRITICAL|FATAL)\b
**20. UUID v4**
[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}
Probar patrones sin riesgo
Pega cualquier patrón en el probador de expresiones regulares de NoxaKit y verás las coincidencias resaltadas en vivo mientras escribes. El extractor con regex te deja aplicar un patrón sobre un bloque de texto y sacar todas las coincidencias, muy útil para extraer datos sin tener que escribir Python ni JavaScript.
Errores habituales
**Olvidarse de escapar los puntos**: dentro de una clase de caracteres el . no necesita escaparse, pero fuera de ella coincide con *cualquier* carácter. Escribe \. cuando quieras decir un punto literal.
**Codicioso frente a perezoso**: .* coge todo lo que puede y .*? lo menos posible. Esto importa mucho con las etiquetas HTML: <.*> se come la línea entera, mientras que <.*?> coincide con una sola etiqueta.
**Anclar el patrón**: sin ^ y $, un patrón coincide en cualquier punto de la cadena. Pon anclas cuando quieras validar un valor completo y no solo encontrarlo dentro de un texto más largo.