Referencias inversas en regex: patrones que recuerdan lo que encontraron
Una referencia inversa como \1 coincide con el texto exacto que un grupo ya capturó. Cómo funcionan, cómo encontrar letras dobles, palabras repetidas y palíndromos, y el único lugar donde no funcionan.

· 6 min de lectura
/(.)\1/
atrapa
- book
- letter
- coffee
deja libre
- cat
- dog
- lemon
La mayor parte de una regex describe tipos de texto: un dígito, una letra, cualquier carácter. Una referencia inversa (backreference) es distinta. Dice “el mismo texto que encontré hace un momento”. Esa sola idea permite que un patrón corto encuentre letras dobles, palabras repetidas y palíndromos, algo que ninguna clase de caracteres puede describir.
Todos los ejemplos de abajo son interactivos. Edita el patrón o pulsa Probar para abrirlo en la Zona de pruebas.
01Primero captura, luego haz referencia
Los paréntesis hacen dos trabajos: agrupan y capturan. El texto con el que coincide un grupo se guarda, numerado de izquierda a derecha según su paréntesis de apertura. \1 significa “el texto que capturó el grupo 1”, \2 el del segundo grupo, y así sucesivamente.
La clave está en el mismo texto. (\w)\w significa “una letra y luego cualquier letra”, así que coincide con casi todo. (\w)\1 significa “una letra y luego exactamente esa letra otra vez”. La referencia inversa no repite el patrón del grupo. Repite el resultado.
02Palabras repetidas
Un error clásico al revisar textos es la palabra duplicada: “the the”. Captura una palabra y luego pide un espacio y la misma palabra:
/\b(\w+) \1\b/Debe coincidir2/2
- this is the the end
- it is is fine
No debe2/2
- the then
- that is it
Sin el \b final, the then coincidiría: the, un espacio y luego el the del principio de then.
03Empezar y terminar con la misma letra
Las anclas y una referencia inversa juntas describen la forma de una palabra:
04Palíndromos de cinco letras
Con dos grupos puedes reflejar una palabra como en un espejo. Captura las dos primeras letras, permite cualquier letra en el centro y luego exígelas de vuelta en orden inverso:
/^(.)(.).\2\1$/Debe coincidir4/4
- level
- radar
- kayak
- refer
No debe2/2
- hello
- lever
lever se queda cerca: empieza por le, pero termina en er, no en el.
05Comillas que forman pareja
Una referencia inversa puede asegurar que la comilla de cierre sea igual que la de apertura. (["']) captura cualquiera de las dos comillas, y \1 cierra con la misma:
06Grupos con nombre
En un patrón largo, los números son difíciles de seguir. La mayoría de los motores te dejan ponerle nombre a un grupo y referirte a él por ese nombre:
/(?<ch>.)\k<ch>/La sintaxis cambia según el lenguaje. JavaScript, .NET y PCRE usan (?<name>…) y \k<name>. El módulo re integrado de Python usa (?P<name>…) y (?P=name).
07Referencias inversas en los reemplazos
Los grupos capturados son igual de útiles cuando reemplazas texto. En la mayoría de los editores y lenguajes puedes volver a poner los grupos en otro orden: busca (\w+), (\w+) y reemplaza con $2 $1 (JavaScript, VS Code) o con \2 \1 (Python, sed) para convertir Lovelace, Ada en Ada Lovelace.
08El único lugar donde no funcionan: dentro de [ ]
Es tentador escribir (.)[^\1] para decir “un carácter seguido de otro distinto”. No funciona. Dentro de una clase de caracteres, \1 no es una referencia inversa. En JavaScript se lee como un código de carácter escapado, así que la clase significa “cualquier cosa excepto el carácter 1”:
Para decir “no el mismo carácter”, usa un lookahead negativo: (.)(?!\1).. (Hay más sobre esto en nuestra guía de lookahead y lookbehind.)
09Pruébalo
En este tablero, cada monstruo tiene dos letras dobles distintas, como la ff y la ee de coffee. Cada inocente tiene solo una:
Atrapa las palabras con dos letras dobles.
Objetivos · 0/5 atrapados
- coffeeobjetivo
- balloonobjetivo
- bookkeeperobjetivo
- committeeobjetivo
- mississippiobjetivo
Inocentes · 0 errores
- bookinocente
- letterinocente
- appleinocente
- grassinocente
- helloinocente
Escribe una regex: el tablero se actualiza mientras escribes.
10Referencia rápida
( … )captura. Los grupos se numeran por su paréntesis de apertura.\1,\2… coinciden con el mismo texto que capturó el grupo, no con el mismo patrón.(?<name>…)con\k<name>(JS, .NET, PCRE), o(?P<name>…)con(?P=name)(Python).- En los reemplazos:
$1(JavaScript) o\1(Python, sed). \1dentro de[ ]no es una referencia inversa.
11Sigue practicando
- La sección de grupos de la guía tiene más ejemplos interactivos.
- La caza de hoy podría necesitar una referencia inversa.