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.
\dun dígito\Dtodo menos un dígito\wletra, dígito o guion bajo\Wlo que no es carácter de palabra\sun espacio en blanco\Stodo menos un espacio^.$un carácter cualquiera^[a-z]+$solo minúsculas^[A-Z]+$solo mayúsculas^[A-Za-z0-9]+$solo letras y dígitos^[^0-9]+$texto sin ningún dígito^[가-힣]+$solo hangul^[ぁ-んァ-ヶー]+$solo kana^[\u4e00-\u9fff]+$solo caracteres chinos^a\.b$un punto literal^a/b$una barra literal\tun tabulador\nun salto de línea\r\nun fin de línea de Windows^\u00e9$un carácter escrito por punto de código^Hellotexto que empieza por esta palabraworld$texto que termina en esta palabra^cat$exactamente esta palabra y nada más\bcat\bla palabra suelta, no dentro de otra\Bcatla palabra solo dentro de otra^cat$una coincidencia que ignora mayúsculas^bel inicio de cada línea, no solo del texto^a.b$cualquier carácter, saltos de línea incluidosRepeticiones y grupos17
Cuántas veces se repite algo y qué cuenta como una unidad.
^ab*c$ninguna o muchas veces^ab+c$una vez o más^colou?r$una letra que puede estar o no^\d{4}$exactamente cuatro dígitos^\d{2,4}$entre dos y cuatro dígitos^\d{2,}$dos dígitos o más<.+?>una etiqueta, lo más corta posible^<.+>$un bloque, lo más largo posible^(?:cat|dog)$una de dos palabras^(?:ab)+$un grupo de dos letras, repetido^(\d{3})-(\d{4})$dos partes capturadas por separado^(?:\d{3}-)+\d{4}$agrupar sin capturar^(?<year>\d{4})-(?<month>\d{2})$capturar con un nombre(\w)\1el mismo carácter dos veces seguidas\b(\w+)\s+\1\bla misma palabra escrita dos veces^(?:https?://)?example\.com$una dirección con o sin el esquema^(?:\d{1,3}\.){3}\d{1,3}$una dirección de cuatro partesMirar alrededor8
Comprueba lo que hay delante o detrás sin consumirlo. Sirve para apilar condiciones.
\d+(?= dollars)un número seguido de cierta palabra^(?!admin$).+$cualquier cosa menos esta palabra(?<=\$)\d+un número precedido de cierto signo(?<!\$)\b\d+un número sin ese signo delante^(?=.*[A-Z])(?=.*\d)(?=.*[a-z]).{8,}$ocho o más con mayúscula, minúscula y dígito^(?!.* ).+$texto sin ningún espacio doble^(?=.*@).+$texto que debe contener este signo\B(?=(\d{3})+(?!\d))el punto donde va la coma de millarComprobar 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 blancoBuscar 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 cerrarCó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.