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ón36
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 incluidos^\p{L}+$letras de cualquier alfabeto^\p{Extended_Pictographic}+$solo pictogramas^[\u0400-\u04FF]+$solo letras cirílicas^\x41$un carácter escrito en hexadecimal^[ㄱ-ㅎㅏ-ㅣ]+$solo jamo del hangul^[-]+$solo escritura tailandesa^[-ۿ]+$solo escritura árabe^[0-9]+$solo dígitos de ancho completoRepeticiones y grupos24
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 partes^\d{0,3}$como mucho tres dígitos^\w{3,8}$entre tres y ocho caracteres de palabra^(?:\w+\.){2}\w+$tres partes separadas por puntos^/[a-z]+/?$una ruta cuya barra final es opcional^(cat|dog)$exactamente una de dos palabras^(ab){3}$un grupo repetido exactamente tres veces^[a-c]{2,4}$de dos a cuatro caracteres de un conjuntoMirar alrededor14
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 millar^(?!.*(.)\1).+$ningún carácter repetido seguido(?<=₩)\d+los dígitos que siguen al signo del won^(?!.*\btest\b).*$una línea que no contiene cierta palabra^(?!test)\w+$lo que no empieza por una palabra dada^.*(?<=\.png)$lo que termina con un sufijo dado^(?!.*\d\d).*$texto sin dos dígitos seguidosComprobar la cadena entera66
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^\d{4}-W(?:0[1-9]|[1-4]\d|5[0-3])$un número de semana ISO, hasta la 53^#(?:[0-9a-f]{4}|[0-9a-f]{8})$un color hexadecimal con canal alfa^\d{4}(?:[ -]?\d{4}){3}$un número de tarjeta en cuatro bloques de cuatro^[A-Z]{3}$un código de moneda de tres letras^0x[0-9a-f]+$un número hexadecimal con el prefijo 0x^[0-9a-f]{64}$un hash de sesenta y cuatro caracteres^[0-9a-f]{24}$un identificador de documento de veinticuatro caracteres^\d{5}$un código postal de cinco cifras^[A-Z]{2}$un código de país de dos letras^(\d{1,3}\.){3}\d{1,3}/\d{1,2}$una dirección IPv4 con prefijo CIDR^01[016789]-?\d{3,4}-?\d{4}$un número de móvil coreano^[가-힣]{2,5}$un nombre en hangul de dos a cinco sílabas^\d{5}(-\d{4})?$un código postal de EE. UU.^([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?::([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?$una dirección IPv6 abreviada^\d{3}-\d{2}-\d{5}$un número de registro mercantil coreano^[a-z]+\/[a-zA-Z0-9][a-zA-Z0-9.+-]*$un tipo MIME^data:[a-z]+\/[a-z0-9.+-]+;base64,[A-Za-z0-9+/]+=*$un URI data: en base64^(\S+\s+){4}\S+$una expresión cron de cinco campos^[A-Za-z]:\\.*$una ruta de unidad de Windows^[\^~]?\d+\.\d+\.\d+$un rango semver con ^ o ~^(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3})$un rango IPv4 privado^[A-Z][a-zA-Z0-9]*$un nombre en PascalCaseBuscar y limpiar49
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\*\*([^*]+)\*\*texto en negrita entre dos asteriscos`([^`]+)`código entre comillas invertidas(\w+)="([^"]*)"un atributo cuyo valor va entre comillas\x1b\[[0-9;]*mun código de escape de color de terminalfrom ['\"]([^'\"]+)['\"]la ruta de un import#[0-9a-fA-F]{6}\bun color hexadecimal dentro del textoTODO:?\s*(.*)una nota TODO en un comentario\d+(px|em|rem|%)un número con unidad CSS!\[([^\]]*)\]\(([^)]+)\)una imagen de Markdown^[-*+]\s+(.+)$un elemento de lista Markdown--[^\n]*un comentario de línea SQL\$\{?([A-Z_][A-Z0-9_]*)\}?una variable de entorno del shell[A-Za-z0-9_-]{11}un id de vídeo de YouTubeCó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.