Saltar al contenido principal
eLearner.app
Módulo 4 · Lección 3 de 415/32 en el curso~10 min
Lecciones del módulo (3/4)

Grupos de no captura: `(?:...)`

A menudo se necesitan paréntesis solo para agrupar (cuantificar, alternar) y NO para extraer el valor. En ese caso, usa la versión de no captura: (?:...). Funciona de forma idéntica a (...) pero no crea un grupo numerado.

Code
Pattern: (?:https?)://(\w+\.\w+)
Sample:  https://example.com e http://test.org
Match e gruppi:
  match  = "https://example.com"   gruppo1 = "example.com"
  match  = "http://test.org"        gruppo1 = "test.org"

(?:https?) agrupa el esquema para aplicar el cuantificador ?, pero no nos interesa extraer https como un grupo: el grupo 1 es directamente el dominio.

Por qué usarlo

  1. Legibilidad: el lector comprende inmediatamente que el grupo solo está ahí por estructura, no para extraer un valor.
  2. Rendimiento: el motor no tiene que almacenar la coincidencia del grupo.
  3. Numeración limpia: los grupos numerados se mantienen alineados con la "información que realmente necesito", sin interferencias.

Optimización con grupos de no captura

El uso de (?:...) le indica al motor que aplique las reglas de agrupación y cuantificación sin desperdiciar memoria almacenando resultados de coincidencia intermedios. Esto es altamente recomendado en bucles pesados o en el procesamiento de textos muy largos.

Pruébalo tú

Ejercicio#regex.m4.l3.e1
Intentos: 0Cargando...

Extrae el dominio (`example.com`, `test.org`…) de cada URL en el texto. Usa `(?:https?)` para el protocolo (no es necesario capturarlo) y un único grupo para el dominio.

Cargando editor...
Mostrar pista

Cambia el primer grupo de (https?) a (?:https?): no hay necesidad de capturarlo, solo quieres el dominio.

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#regex.m4.l3.e2
Intentos: 0Cargando...

Encuentra cada repetición de `ab` como una sola coincidencia, pero SIN capturar el grupo (ya que solo necesitas la coincidencia completa).

Cargando editor...
Mostrar pista

Misma sintaxis que la lección anterior, pero con (?:ab)+ en lugar de (ab)+.

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#regex.m4.l3.e3
Intentos: 0Cargando...

Encuentra dígitos de precio seguidos opcionalmente por partes decimales dentro de un grupo de no captura, ej. `100` o `100.50`.

Cargando editor...
Mostrar pista

Usa (?:\.\d{2})? para hacer que la parte decimal sea opcional sin capturarla.

Solución disponible después de 3 intentos