Constructor y Sintetizador de Regex

Construya expresiones regulares visualmente ensamblando bloques modulares, cuantificadores, clases de caracteres y aserciones de límites. Genere patrones sintácticamente válidos con escape automatizado y exporte código para JavaScript, Python, Java, C#, PHP y Go.

Expresión regular generada
/^[a-zA-Z0-9]+@[a-zA-Z]+\.[a-zA-Z]{2,6}$/gi
Modificadores:
Bloques modulares de la canalización5 pasos
^Ancla de inicio de cadena (^)
1
[a-zA-Z0-9]+
2
@
3
[a-zA-Z]+
4
\.
5
-
[a-zA-Z]{2,6}
$Ancla de final de cadena ($)
Fragmentos de código
// JavaScript / TypeScript (ES6+)
const regex = /^[a-zA-Z0-9]+@[a-zA-Z]+\.[a-zA-Z]{2,6}$/gi;
const text = "Comuníquese con el equipo de soporte en soporte@codekivo.com o soporte.dev@empresa.org.";

// 1. Validar si la cadena coincide (evaluación booleana)
const isValid = regex.test(text);
console.log("¿Es válido?:", isValid);

// 2. Buscar todas las coincidencias y grupos de captura
const matches = [...text.matchAll(regex)];
for (const match of matches) {
  console.log("Coincidencia:", match[0], "en la posición:", match.index);
  if (match.groups) {
    console.log("Grupos nombrados:", match.groups);
  }
}
Probador interactivo en vivo
Visualizador de coincidencias:Sin coincidencias
Ningún fragmento de texto coincide con el patrón actual
¿Necesita posiciones de grupos de captura o modo de reemplazo?Abrir en Probador de Regex

Todos los patrones se construyen y evalúan 100% de forma local en su navegador web: sin rastreo, sin telemetría ni transmisión de datos a servidores.

Flujo de trabajo para la construcción visual de expresiones regulares

Paso 1

Inicializar el ámbito de anclaje y modo de coincidencia

Defina si la expresión debe validar la entrada completa (^...$), aislar límites de palabra (\b) o rastrear subcadenas no ancladas en flujos de texto.

Paso 2

Ensamblar bloques de tokens en la canalización

Añada clases de caracteres (\d dígitos, \w alfanuméricos, \s espacios en blanco), rangos entre corchetes ([a-z0-9]) o literales con escape metacaracterístico automatizado.

Paso 3

Parametrizar cuantificadores y límites de retroceso

Configure restricciones de cardinalidad: Exactamente 1, Opcional (?), Uno o más (+), Cero o más (*) o rangos acotados {min, max}, alternando entre evaluación codiciosa o perezosa.

Paso 4

Encapsular bifurcaciones de alternancia lógica

Combine condiciones multicriterio mediante alternancias. El constructor encapsula las ramas en grupos sin captura (?:...) para proteger la precedencia sin efectos secundarios.

Paso 5

Verificar casos límite y exportar código idiomático

Compruebe el patrón sintetizado en el evaluador interactivo en tiempo real y copie código listo para producción con el escape adecuado para JavaScript, Python, Java, C#, PHP o Go.

Planos de patrones para producción y deconstrucción estructural

Patrones de expresiones regulares probados en entornos corporativos, diseñados con restricciones atómicas de tokens, alternancias equilibradas y anclas de contorno seguras:

1. Verificación de buzón y dominio RFC 5322

RFC 5322

Aplica partes locales alfanuméricas válidas con direccionamiento por puntos y subdirecciones con signo más (+etiqueta), separadas por una @ literal del dominio de host, exigiendo un punto escapado y un dominio de nivel superior de al menos 2 caracteres.

Patrón sintetizado
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Ejemplo de texto de prueba
ingeniero@metricas-cloud.interno

2. Analizador de URIs web y endpoints RFC 3986

RFC 3986

Coincide con esquemas HTTP y HTTPS con subdominios opcionales www., validando nombres de host completos, rutas de recursos y cadenas de consulta opcionales sin riesgo de desbordamiento de estados.

Patrón sintetizado
^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&//=]*)$
Ejemplo de texto de prueba
https://api.gateway.io/v1/metrics?interval=60s

3. Directiva de contraseñas seguras (Aserciones Lookahead)

Lookahead

Ejecuta cuatro aserciones lookahead positivas de ancho cero (?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&]) para verificar la diversidad de caracteres en paralelo sin avanzar la posición del cursor de texto.

Patrón sintetizado
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
Ejemplo de texto de prueba
ClaveSegur@2026!

4. Cuarteto estricto de octetos IPv4 (Rango 0–255)

Rango de octetos

Sustituye comodines imprecisos de 3 dígitos por ramas de alternancia priorizadas: 25[0-5], 2[0-4][0-9] o [01]?[0-9][0-9]? para impedir valores fuera de rango como 256.0.0.1.

Patrón sintetizado
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
Ejemplo de texto de prueba
192.168.1.254

5. Fecha de calendario ISO-8601 (AAAA-MM-DD)

ISO-8601

Restringe años de cuatro dígitos, secuencias de meses válidas (01–12) y días válidos (01–31) con agrupaciones sin captura, rechazando anomalías como el mes 13 o el día 32.

Patrón sintetizado
^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$
Ejemplo de texto de prueba
2026-09-16

6. Identificador UUID v4 RFC 4122

RFC 4122

Comprueba la segmentación fija de bloques hexadecimales 8-4-4-4-12, imponiendo un literal 4 en el tercer bloque (versión 4) y restricciones de variante ([89abAB]) en el cuarto bloque.

Patrón sintetizado
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$
Ejemplo de texto de prueba
c9bf9e57-1685-4c89-bafb-ff5af830be8a

Taxonomía de tokens visuales y referencia de compilación gramatical

Mapeo directo entre los bloques modulares visuales, los nodos del motor compilado, las reglas de precedencia y las mecánicas de correspondencia:

Categoría de bloqueSintaxisNodo del motorSemántica de coincidencia y precedenciaEjemplo
Dígitos\dCharacterClassCoincide con dígitos decimales del 0 al 9. En modo Unicode (/u o /v), los motores estándar evalúan dígitos ASCII salvo que se declaren propiedades Unicode explícitas.0, 7, 9
No dígitos\DInvertedClassCoincide con cualquier carácter fuera del conjunto de dígitos decimales, incluidos signos de puntuación, espacios y letras.a, @, -
Caracteres de palabra\wWordClassEquivalente a [a-zA-Z0-9_]. Coincide con caracteres alfanuméricos y guion bajo. Excluye guiones medios y puntos.user_01
Espacio en blanco\sSpaceClassCoincide con espacios horizontales y verticales: espacio estándar (\x20), tabulador (\t), salto de línea (\n), retorno de carro (\r) y salto de página (\f)." ", "\t"
Comodín punto.AnyCharCoincide con cualquier carácter individual excepto terminadores de línea (\n, \r), a menos que el modificador single-line / dotAll (/s) se encuentre activo.k, %, 5
Rango personalizado[a-z0-9]CharSetRangeEvalúa un rango continuo de puntos de código entre dos límites. Dentro de los corchetes, caracteres como . o * pierden su condición de cuantificador.m, 4
Conjunto negado[^...]NegatedCharSetCoincide con cualquier carácter no enumerado dentro de los corchetes. Muy eficaz para delimitar campos sin recurrir a comodines perezosos (p. ej., [^"]*).# en [^a-z]
Cadena literalapi\.v1LiteralSequenceCoincide con secuencias de caracteres exactas. Los metacaracteres reservados (. * + ? ^ $ { } ( ) [ ] | \) se escapan de forma automática con barras invertidas.api.v1
Opcional?QuantifierZeroOneCoincide con el token anterior 0 o 1 vez. Equivalente a {0,1}. En modo codicioso intenta 1 coincidencia primero; retrocede a 0 si los tokens posteriores fallan.http, https
Uno o más+QuantifierPlusCoincide con el token precedente 1 o más veces. Equivalente a {1,}. Consume codiciosamente las repeticiones disponibles hasta el final antes de retroceder.42, 999
Intervalo acotado{min,max}QuantifierRangeRestringe estrictamente las repeticiones entre los límites min y max. Si se omite max ({min,}), coincide sin límite superior por encima de min.1234
Cuantificador perezoso+?, *?LazyModifierInvierte la codicia del cuantificador. Coincide con la cantidad mínima indispensable, expandiendo un token a la vez solo cuando la evaluación subsiguiente falla.<div>
Alternancia(?:a|b)NonCaptureBranchCoincide con la rama A o con la rama B. Envolverlo en (?:...) previene que la tubería de alternancia contamine etapas adyacentes de la canalización.jpg, png
Anclas de frontera^ y $BoundaryAnchorFijan la posición del cursor exactamente en el inicio (^) y final ($) del búfer de texto. Esenciales para evitar elusiones en validación de entradas.^patron$

Matriz de transpilación multilingüe y ejecución en motores de producción

Diferencias sintácticas clave y comportamiento del motor en tiempo de ejecución al exportar patrones a los 6 entornos compatibles:

Entorno de destinoEstructura de compilaciónReglas de delimitadores y escape de cadenasLlamada de evaluación
JavaScript / TypeScriptconst re = /patron/flags;Los literales RegExp exigen escapar la barra diagonal (\/). Las barras inversas (\d) no precisan doble escape a nivel de cadena.re.test(str)
Python 3 (re)pat = re.compile(r"patron")El prefijo de cadena cruda (r"...") impide que el analizador léxico de Python interprete las barras inversas como secuencias de escape.bool(pat.search(str))
Java 8+ (java.util.regex)Pattern.compile("patron")Java carece de literales de cadena cruda nativos para regex. Cada barra inversa del motor debe duplicarse en el código fuente ("\\\\d+" para \d+).pat.matcher(str).find()
C# (.NET 6+)new Regex(@"patron")El literal textual verbatim (@"...") deshabilita el escape de barras inversas del compilador. Las comillas dobles internas se escapan como ("").regex.IsMatch(str)
PHP 7/8 (PCRE2)preg_match('/patron/', $str)PCRE2 exige delimitar el patrón (como /.../ o #...#). Los modificadores (como "i" o "u") se agregan inmediatamente tras el delimitador final.preg_match($pat, $str)
Go (regexp / RE2)regexp.MustCompile(`patron`)Los literales en comillas invertidas (`...`) preservan las barras inversas. RE2 garantiza evaluación lineal O(N) excluyendo lookaheads y retroceso.re.MatchString(str)

Mecánicas internas: síntesis sintáctica, riesgos de escape y retroceso catastrófico

1. El riesgo de escape de metacaracteres

Al redactar expresiones regulares manualmente, símbolos literales como puntos, asteriscos, corchetes y barras cumplen un doble propósito como operadores estructurales. Por ejemplo, intentar validar una extensión de archivo como .tar.gz con un punto sin escapar coincide involuntariamente con XtarYgz porque el punto actúa como comodín universal.

Los constructores visuales erradican esta categoría de errores tratando las cadenas introducidas como secuencias de caracteres literales y aplicando escape programático sobre los 14 metacaracteres RFC: \ ^ $ . | ? * + ( ) [ ] { }.

2. Precedencia de operadores y filtraciones de alternancia

En las gramáticas formales de expresiones regulares, la concatenación tiene mayor precedencia que la alternancia (|). Desarrolladores con poca experiencia suelen escribir patrones como ^auth|token$ con la intención de coincidir con "auth" o "token". En realidad, la gramática lo interpreta como (^auth)|(token$), coincidiendo con cualquier cadena que comience por "auth" o termine con "token".

El constructor visual impide la fuga de precedencia encapsulando de forma estricta todas las opciones de alternancia dentro de grupos sin captura: ^(?:auth|token)$.

3. Prevención de retroceso catastrófico (ReDoS)

Los motores basados en autómatas finitos no deterministas (NFA) presentes en JavaScript, Python, Java, C# y PHP utilizan retroceso recursivo (backtracking) para explorar ramificaciones alternativas. Cuando un patrón contiene cuantificadores anidados con clases de caracteres superpuestas —como (a+)+$ o ([a-zA-Z]+)*=—, una entrada no coincidente como "aaaaaaaaaaaaaaaaaaaa!" desencadena una explosión combinatoria exponencial en el espacio de estados ($O(2^N)$ pasos).

Regla de construcción determinista: Asegúrese de que los tokens repetidos adyacentes sean mutuamente excluyentes. En lugar de utilizar comodines ambiguos como ".*?" dentro de cadenas entre comillas, emplee conjuntos de caracteres negados como "[^"]*". El conjunto negado garantiza matemáticamente que el cuantificador interno no pueda absorber el delimitador de cierre, eliminando por completo el retroceso recursivo.

Pautas de ingeniería para expresiones regulares de alto rendimiento

  • Ancle validaciones de cadena completa: Envuelva siempre los patrones de validación en ^...$ para evitar elusiones por coincidencias parciales de subcadenas.
  • Priorice grupos sin captura: Utilice (?:...) en lugar de (...) salvo que requiera extraer o reutilizar la subcadena. Los grupos de captura asignan memoria adicional y reducen el rendimiento del motor.
  • Ordene alternancias por especificidad: Sitúe las ramas más restrictivas y extensas antes de los prefijos más cortos (por ejemplo, (?:https|http) en lugar de (?:http|https) en motores con evaluación de izquierda a derecha).
  • Prefiera conjuntos negados frente a comodines perezosos: Reemplace <.*?> por <[^>]*> para lograr evaluación determinista lineal sin bloqueos de retroceso en el motor.
  • Considere las particularidades del entorno: Si su código se ejecuta en Go, evite aserciones lookaround y referencias inversas. Si compila para Java, recuerde el doble escape de cadenas en el código fuente (\\d).

Frequently Asked Questions

¿Cómo construir una expresión regular visualmente sin escribir código manualmente?

Seleccione y apile bloques modulares prediseñados: clases de caracteres (dígitos, letras, espacios en blanco), cadenas literales exactas y rangos entre corchetes personalizados. Configure cuantificadores de repetición (opcional, uno o más, rangos acotados) y active anclas de frontera (^...$ o \b). El constructor compila la canalización de bloques en una expresión regular optimizada y sintácticamente válida en tiempo real, eliminando errores de sintaxis y descuidos de escape manual.

¿Cómo gestiona el constructor el escape automático de caracteres especiales regex?

En expresiones regulares estándar, los caracteres como . * + ? ^ $ { } ( ) [ ] | \ y / poseen significado estructural. Al introducir texto literal en este generador, se insertan automáticamente barras invertidas de escape antes de los 14 metacaracteres reservados (por ejemplo, transformando "api.v1/test" en "api\.v1\/test"), garantizando la correspondencia literal exacta en lugar de comodines imprevistos.

¿Cómo previenen las anclas de cadena completa (^ y $) las vulnerabilidades de elusión en validaciones?

Sin anclas de cadena completa, un patrón coincide con cualquier subcadena en cualquier posición del texto de entrada (por ejemplo, \d{4} coincide dentro de "abc1234def"). Activar "^...$ Cadena completa" fija el signo de intercalación (^) en el índice inicial 0 y el dólar ($) en el límite de terminación, asegurando que la totalidad del texto satisfaga el patrón. Esto resulta indispensable en la validación segura de formularios como correos electrónicos, nombres de usuario y códigos de identificación.

¿Cómo crear condiciones disyuntivas (OR / alternancias) sin filtrar la precedencia de operadores?

Utilice el bloque de alternancia o la barra vertical (|). El constructor encapsula las alternativas dentro de grupos sin captura (?:cat|dog) para evitar que el operador de alternancia afecte a los tokens adyacentes de la canalización. De este modo, (?:cat|dog)_food se evalúa como "(cat O dog) seguido de _food", en lugar de interpretar "cat" de forma aislada o "dog_food".

¿Cuál es la diferencia práctica entre cuantificadores codiciosos (greedy) y perezosos (lazy)?

Un cuantificador codicioso (+, *, {min,max}) consume la mayor cantidad de caracteres coincidentes posible antes de retroceder un carácter a la vez para satisfacer los tokens posteriores. Por el contrario, un cuantificador perezoso o no codicioso (+?, *?, {min,max}?) consume el número mínimo de caracteres indispensable para satisfacer la coincidencia. Por ejemplo, aplicar "<.*>" sobre "<div><span>test</span></div>" consume codiciosamente toda la cadena, mientras que "<.*?>" se detiene en cada etiqueta HTML individual.

¿A qué lenguajes de programación se puede exportar el código generado?

El generador exporta fragmentos de código listos para su ejecución en JavaScript/TypeScript (ES6+), Python 3 (módulo re), Java 8+ (java.util.regex), C# (.NET Core / .NET 8+), PHP 7/8 (funciones preg_match) y Go (paquete regexp). Cada fragmento incorpora las convenciones de escape específicas de cada entorno (como las barras dobles de Java "\\d" o los literales crudos de Python r"...") e instrucciones idiomáticas de ejecución.

¿Por qué el paquete regexp de la biblioteca estándar de Go rechaza expresiones con aserciones lookaround?

El paquete regexp de la biblioteca estándar de Go utiliza el motor RE2, basado en autómatas finitos diseñado para garantizar un tiempo de ejecución estrictamente lineal O(N) respecto a la longitud del texto. Las aserciones lookahead (?=...), lookbehind (?<=...) y las referencias inversas (\1) precisan pilas de estados con retroceso recursivo que pueden degradarse a complejidad exponencial (O(2^N)). Para impedir ataques de denegación de servicio por expresiones regulares (ReDoS), RE2 excluye intencionadamente construcciones gramaticales dependientes de backtracking.

¿Cómo evitar el retroceso catastrófico (ReDoS) al diseñar expresiones regulares?

El retroceso catastrófico se produce en motores NFA cuando cuantificadores anidados o alternancias superpuestas (como (a+)+$ o ([a-z]+)*=) procesan una entrada no coincidente, obligando al motor a evaluar ramificaciones exponenciales (2^N) antes de fallar. Para prevenir ReDoS, mantenga conjuntos de tokens adyacentes mutuamente disjuntos, elimine repeticiones anidadas y priorice clases de caracteres negadas (como [^"\n]*) frente a comodines abiertos (.*).