Prueba expresiones regulares con resaltado visual en tiempo real
También podrías necesitar
Las expresiones regulares (regex) son patrones que permiten buscar, validar y transformar texto con precisión quirúrgica. JavaScript implementa el motor RegExp del estándar ECMAScript, con soporte completo para grupos de captura numerados y con nombre, lookahead/lookbehind, clases de caracteres Unicode y todos los flags modernos (g, i, m, s, u, y). Esta herramienta ejecuta la expresión en tu navegador sin enviar datos a ningún servidor: cada keystroke actualiza los resultados al instante, resaltando coincidencias en el texto de prueba y mostrando el detalle de cada match con posición exacta, valor capturado y grupos.
¿Qué motor de regex usa esta herramienta?
Usa el motor RegExp nativo de JavaScript (ECMAScript 2024), el mismo que usan Chrome, Firefox, Safari y Node.js. Incluye soporte completo para lookbehind (?<=...), grupos con nombre (?<name>...) y propiedades Unicode (\p{...} con flag u).
¿Qué diferencia hay entre los flags g e y (sticky)?
El flag 'g' (global) encuentra todas las coincidencias de izquierda a derecha, avanzando sin restricciones. El flag 'y' (sticky) también busca globalmente, pero solo acepta coincidencias exactamente en la posición lastIndex — falla si hay caracteres no coincidentes entre matches. Es ideal para tokenizadores que deben consumir el texto de forma continua.
¿Qué hace el flag s (dotall)?
Por defecto, el punto (.) coincide con cualquier carácter EXCEPTO saltos de línea (\n, \r). Con el flag 's', el punto también coincide con saltos de línea. Imprescindible para patrones que deben abarcar múltiples líneas, como extraer bloques de código o comentarios multilínea.
¿Cómo uso grupos de captura con nombre?
Usa la sintaxis (?<nombre>patrón). Ejemplo: (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) captura año, mes y día con nombres descriptivos. En la lista de matches verás cada grupo con su nombre y el valor capturado en esa coincidencia.
¿Qué diferencia hay entre .* y .*? (greedy vs lazy)?
Los cuantificadores greedy (por defecto) capturan el máximo de caracteres posible. Añadiendo ? se vuelven lazy: capturan el mínimo posible. Ejemplo: en '<a><b>', el patrón <.*> captura el string completo '<a><b>', mientras <.*?> captura solo '<a>'. La elección impacta directamente en qué se incluye en cada match.
¿Cómo escapo un punto literal o paréntesis?
Los meta-caracteres de regex ( . * + ? ^ $ { } [ ] | ( ) \ ) deben escaparse con una barra invertida cuando quieres buscarlos literalmente. Ejemplo: \. busca un punto literal, \( un paréntesis de apertura. Sin el escape, el punto coincide con cualquier carácter y los paréntesis crean un grupo de captura.