Inicio·Expresiones regulares

133 expresiones regulares

Desde la notación hasta comprobar correos, fechas y direcciones. Cada expresión trae ejemplos que deben coincidir y otros que no, y las pruebas los ejecutan de verdad.

Notación28

Cómo señalar un solo carácter. Todo lo demás se construye sobre esto.

Repeticiones y grupos17

Cuántas veces se repite algo y qué cuenta como una unidad.

Mirar alrededor8

Comprueba lo que hay delante o detrás sin consumirlo. Sirve para apilar condiciones.

Comprobar la cadena entera44

Anclado en ambos extremos: la cadena entera debe coincidir. Es lo que usa la validación.

^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$una dirección de correo^https?://[^\s/$.?#][^\s]*$una dirección web^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$un nombre de dominio^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$una dirección IPv4^(?:[0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$una dirección IPv6 escrita completa^(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}$una dirección MAC^(?:6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]?\d{1,4})$un número de puerto^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$un UUID^#(?:[0-9a-f]{3}|[0-9a-f]{6})$un código de color hexadecimal^rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)$un valor de color rgb()^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$una fecha en formato ISO^(?:0[1-9]|[12]\d|3[01])/(?:0[1-9]|1[0-2])/\d{4}$una fecha escrita con barras^(?:[01]\d|2[0-3]):[0-5]\d$una hora en formato de 24 horas^(?:0?[1-9]|1[0-2]):[0-5]\d\s?(?:am|pm)$una hora con am o pm^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$una marca de tiempo ISO completa^P(?=\d|T\d)(?:\d+Y)?(?:\d+M)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$una duración ISO^\d+\.\d+\.\d+(?:-[0-9a-z.-]+)?(?:\+[0-9a-z.-]+)?$un número de versión semántica^\d+$un entero sin signo^[+-]?\d+$un entero que puede llevar signo^-?\d+(?:\.\d+)?$un número que puede tener decimales^-?\d+(?:\.\d+)?[eE][+-]?\d+$un número en notación científica^(?:100(?:\.0+)?|\d{1,2}(?:\.\d+)?)%$un porcentaje de 0 a 100^\d{1,3}(?:,\d{3})*$un número agrupado con comas^[$€£¥₩]\s?\d{1,3}(?:,\d{3})*(?:\.\d{2})?$un importe con símbolo de moneda^[0-9a-f]+$una cadena hexadecimal^[01]+$una cadena solo de 0 y 1^[0-7]+$una cadena octal^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$una cadena codificada en base64^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*$un JWT dividido por dos puntos^\+[1-9]\d{7,14}$un número de teléfono en forma internacional^[a-z][a-z0-9_]{2,15}$un usuario que empieza por letra^[a-z0-9]+(?:-[a-z0-9]+)*$un slug de URL^[^\\/:*?"<>|]+\.[a-z0-9]+$un nombre de archivo con extensión^.+\.(?:jpe?g|png|gif|webp|avif|svg)$una extensión de archivo de imagen^/(?:[^/\0]+/)*[^/\0]*$una ruta estilo Unix^[A-Za-z]:\\(?:[^\\/:*?"<>|]+\\)*[^\\/:*?"<>|]*$una ruta de Windows^</?[a-z][a-z0-9]*(?:\s[^<>]*)?/?>$una etiqueta HTML^\.-?[_a-z][_a-z0-9-]*$un selector de clase CSS^M{0,3}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})$un número romano^-?(?:90(?:\.0+)?|[1-8]?\d(?:\.\d+)?)$un valor de latitud^-?(?:180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$un valor de longitud^(?:0|[1-9]\d*)$un número sin cero a la izquierda^\d*[02468]$un número par^\s*$una línea en blanco

Buscar y limpiar36

Para extraer o borrar solo la parte que necesitas de un texto mayor.

\s+$espacio sobrante al final^\s+espacio al principio^\s+|\s+$espacio en ambos extremos\s{2,}dos o más espacios seguidos\n\s*\nuna línea vacía entre dos\D+todo lo que no es dígito[^\x00-\x7F]un carácter fuera de ASCII[\x00-\x1F]un carácter de control invisible</?[^>]+>las etiquetas HTML de un texto<!--[\s\S]*?-->un comentario HTML//.*$un comentario que empieza con dos barras/\*[\s\S]*?\*/un comentario de varias líneas"[^"\\]*(?:\\.[^"\\]*)*"texto entre comillas dobles'[^'\\]*(?:\\.[^'\\]*)*'texto entre comillas simples\[([^\]]+)\]\(([^)]+)\)un enlace Markdown^#{1,6}\s+.+$una línea de encabezado Markdown(?:^|\s)#([a-z0-9_]+)una etiqueta con almohadilla(?:^|\s)@([a-z0-9_]{2,})una mención con arroba[?&]([^=&]+)=([^&]*)un parámetro de consulta de una URLhttps?://[^\s<>"]+una URL dentro de un texto normal^https?://([^/:?#]+)solo el dominio de una URL\.([a-z0-9]+)$la extensión de un nombre de archivo(?<=[a-z0-9])(?=[A-Z])la junta entre palabras en camelCase_([a-z])la letra que sigue a un guion bajo-([a-z])la letra que sigue a un guion(?:^|,)("(?:[^"]|"")*"|[^,]+)un campo separado por comas^([^=]+)=(.*)$un nombre y valor separados por igual^\s*(\S+)la primera palabra(\S+)\s*$la última palabra\d+grupos de dígitos dentro de un texto\b\w+\bcada palabra, una a una\[([^\]]*)\]lo que hay entre corchetes\(([^)]*)\)lo que hay entre paréntesis[\uD800-\uDBFF][\uDC00-\uDFFF]un emoji que ocupa dos unidades(.)\1{2,}el mismo carácter tres veces o más,\s*([}\]])una coma antes de cerrar

Cómo leerlo

  • Con ^ y $ alrededor, debe coincidir la cadena entera; sin ellos, la coincidencia puede estar en cualquier parte. Ancla siempre lo que uses para validar.
  • Los paréntesis ( ) capturan lo que envuelven. Si solo necesitas agrupar, escribe (?: ) para que no se desplace la numeración.
  • Cada expresión de aquí se comprueba con sus ejemplos. Aun así, "parece un correo" y "es un buzón real" son cosas distintas.
  • Las repeticiones abiertas anidadas como (a+)+ pueden dispararse con ciertas entradas. Busca esa forma antes de pegar una expresión ajena.

Preguntas frecuentes

Q. ¿Qué es una expresión regular?

Un pequeño lenguaje para describir la forma que buscas en un texto. Escribir \d{4} en vez de "cuatro dígitos" permite que el programa encuentre cada sitio con esa forma. JavaScript, Python, Java y casi todos usan la misma notación.

Q. ¿Por qué la comprobación de correo es tan corta?

Un patrón que cubra toda la especificación ocupa miles de caracteres y aun así no dice si el buzón existe. Detectar erratas es lo que puede hacer una expresión regular; la única comprobación real es enviar un mensaje de confirmación.

Q. ¿Por qué cambian los patrones según el lenguaje?

El núcleo es común, los detalles no. JavaScript no tiene \A y Python necesita activar re.MULTILINE. Todo lo de aquí está escrito para funcionar tal cual en JavaScript.

Q. ¿Qué significa que un patrón pueda ser lento?

Cuando se anidan repeticiones abiertas, como (a+)+, el número de vueltas atrás se dispara con entradas que no coinciden. Una cadena corta puede tardar segundos, lo que es peligroso en un servidor.

Q. ¿Puedo fiarme de estos patrones?

Cada uno se guarda con ejemplos que deben coincidir y otros que no, y las pruebas ejecutan los 133 de verdad. Los ejemplos que ves son los mismos que usan las pruebas, así que la descripción no puede separarse del patrón.