Referencia completa de expresiones regulares con ejemplos interactivos
.\d\D\w\W\s\S[abc][^abc][a-z]^$\b\B*+?{n}{n,}{n,m}*?+?(abc)(?:abc)(?<name>…)(?=…)(?!…)(?<=…)(?<!…)gimsu^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$https?://[^\s/$.?#].[^\s]*\b(?:\d{1,3}\.){3}\d{1,3}\b\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])#(?:[0-9a-fA-F]{3}){1,2}[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}^\d+$^[a-zA-Z]+$Para más opciones → Regex Tester completo
Las expresiones regulares (regex) son una de las herramientas más poderosas del desarrollo de software — y también de las más difíciles de recordar. Esta referencia interactiva cubre toda la sintaxis de regex compatible con el motor de JavaScript (ECMA-262), organizada en secciones temáticas: clases de caracteres (\d, \w, \s, conjuntos [abc]), anchors y límites (^, $, \b), cuantificadores greedy y lazy (*, +, ?, {n,m}, *?), grupos capturantes y no-capturantes, lookaheads y lookbehinds ((?=...), (?!...), (?<=...), (?<!...)), flags del motor (g, i, m, s, u) y patrones comunes para casos de uso frecuentes como validación de email, URLs, IPs, fechas, colores hex y UUIDs. El panel de búsqueda filtra todas las entradas en tiempo real. El panel de prueba integrado te permite testear cualquier patrón contra texto de muestra directamente en la página.
¿Es esta cheatsheet compatible con todos los lenguajes?
La cheatsheet cubre la sintaxis de JavaScript (ECMA-262), que comparte la mayoría de características con otros motores modernos. Las diferencias principales: Python no soporta lookbehind de longitud variable; Go (RE2) no soporta lookaheads ni lookbehinds; POSIX (grep básico) no soporta grupos, cuantificadores lazy ni lookaheads. Para la mayoría del desarrollo web y scripting con Node.js/Python, la sintaxis es prácticamente idéntica.
¿Qué diferencia hay entre greedy y lazy?
Por defecto, los cuantificadores (*, +, ?) son 'greedy' (codiciosos): intentan coincidir con la mayor cantidad de caracteres posible. Un cuantificador lazy (con ? añadido: *?, +?, ??) hace lo contrario: intenta coincidir con la menor cantidad posible. Ejemplo: en '<div><span></span></div>', la regex '<.*>' (greedy) coincide con todo el string. La regex '<.*?>' (lazy) coincide solo con '<div>', luego '<span>', etc., por separado.
¿Cuándo usar grupos capturantes vs no-capturantes?
Usa grupos capturantes (...) cuando necesites extraer el contenido del grupo en el código (con match[1], match[2], etc. o con grupos nombrados). Usa grupos no-capturantes (?:...) cuando necesites agrupar para aplicar cuantificadores pero no te interesa el contenido del grupo — son más eficientes en memoria y evitan desplazar los índices de los grupos capturantes que sí necesitas.
¿Cuál es la diferencia entre lookahead y lookbehind?
Un lookahead (?=...) es una aserción que verifica lo que viene DESPUÉS de la posición actual sin consumir caracteres. Un lookbehind (?<=...) verifica lo que viene ANTES. Ambos pueden ser positivos (debe estar presente) o negativos (no debe estar presente: (?!...) y (?<!...)). Por ejemplo, '\d+(?= USD)' coincide con números seguidos de ' USD' pero el ' USD' no forma parte del match.
¿Por qué mi regex funciona en JavaScript pero no en Python o Go?
Cada motor de regex tiene características distintas. Las diferencias más comunes: Go (RE2) rechaza lookaheads y lookbehinds por razones de performance. Python soporta la mayoría de syntax JS pero usa grupos nombrados con (?P<name>...) en vez de (?<name>...). Si necesitas compatibilidad cross-language, evita: lookbehind de longitud variable, grupos atómicos y patrones con backtracking excesivo.