Grupos y referencias inversas

Agrupa caracteres con paréntesis, ramifica con la alternancia y luego captura una coincidencia y recupérala más adelante en el mismo patrón con una referencia inversa (backreference).

Lee las reglas: Grupos: captura y nombre en la Guía →Entrénalo: Patrones con truco →

Qué aprenderás

Agrupación Alternancia Grupos sin captura Referencias inversas Palíndromos

Pasos · 13

  1. 01Agrupar con paréntesisInstrucciones
  2. 02Un grupo es una unidadCaza
  3. 03Un cuantificador sobre un grupoCaza
  4. 04Alternancia con la barra verticalCaza
  5. 05Resalta las alternativasCaza
  6. 06Agrupar las alternativasCaza
  7. 07Grupos que no capturanCaza
  8. 08Referencias inversasCaza
  9. 09Un palíndromo de cinco letrasCaza
  10. 10Una palabra repetidaCaza
  11. 11Un grupo opcionalCaza
  12. 12Golf: sílaba repetidaCaza
  13. 13Captura y recuperación dominadasInstrucciones

Grupos, alternancia y referencias inversas en regex

Los paréntesis de una expresión regular forman un grupo: varios caracteres tratados como una sola unidad. Pon un cuantificador después del grupo y repetirá la unidad entera, no el último carácter. Pon una barra vertical | dentro y obtienes una alternancia, una lista de opciones de las que puede coincidir cualquiera.

Un grupo normal ( ) además captura: recuerda el texto exacto con el que coincidió, y una referencia inversa como \1 vuelve a pedir ese mismo texto más adelante en el patrón. Así es como una regex encuentra letras repetidas, comillas que cierran igual que abren o una palabra escrita dos veces. Los grupos se numeran por su paréntesis de apertura, contando desde la izquierda.

Cuando necesites agrupar pero no recordar, escribe un grupo sin captura, (?:...). Agrupa y ramifica igual que los demás y mantiene ordenada la numeración del resto de tus grupos. En una caza, un grupo bien colocado suele marcar la diferencia entre un patrón que atrapa a los monstruos y otro que también atrapa a los inocentes.

Ejemplos

  1. /^(?:un|re)do$/

    Atrapa

    • undo
    • redo

    Deja libre

    • do
    • outdo
    • undone

    El grupo separa la elección entre un y re del resto del patrón, y las anclas frenan las palabras más largas.

  2. /^(\d{3}-)?\d{4}$/

    Atrapa

    • 555-0199
    • 0199

    Deja libre

    • 55-0199
    • 555-019
    • 5550-199

    El ? después del grupo hace opcional todo el prefijo de zona, guion incluido, nunca solo la mitad.

  3. /^(ha)+!$/

    Atrapa

    • ha!
    • haha!
    • hahaha!

    Deja libre

    • hah!
    • ha
    • aha!

    El + después del grupo repite el ha entero, no solo la a, así que una h suelta antes del ! queda libre.

  4. /(["']).*\1/

    Atrapa

    • "hi"
    • 'ok'
    • say 'yo'

    Deja libre

    • "hi'
    • 'ok"
    • no quotes

    La referencia inversa hace que la comilla de cierre coincida con la que abrió el texto, sea cual sea.

Errores frecuentes

  • Dejar la alternancia sin agrupar. La barra vertical tiene la prioridad más baja, así que ^red|blue$ significa ^red o blue$; agrupa las opciones como ^(red|blue)$ cuando las anclas deban aplicarse a las dos.
  • Usar corchetes para palabras. [red|blue] es una clase de caracteres que coincide con una sola letra de ese conjunto (o con la propia barra vertical), no con la palabra red ni con blue.
  • Descolocar tus referencias inversas. Un grupo de captura nuevo más a la izquierda renumera todos los que vienen detrás, y \1 de pronto apunta a otro sitio; usa (?:...) para los grupos que nunca vas a recuperar.

Lee las reglas: Grupos: captura y nombre en la Guía →Entrénalo: Patrones con truco →

Lee más: Referencias inversas en regex: patrones que recuerdan lo que encontraron →

Lee más: Grupos con nombre y grupos sin captura en regex →