Referencias inversas en JScript

Las referencias inversas se usan para buscar grupos repetidos de caracteres. También se usan para cambiar el formato de una cadena de entrada reorganizando el orden y la posición de los elementos que la componen.

Puede hacer referencia a una subexpresión dentro de una expresión regular y dentro una cadena de reemplazo. Cada subexpresión se identifica mediante un número y se hace referencia a ella como referencia inversa.

Los paréntesis de una expresión regular se usan para crear una subexpresión. El programa puede recuperar las subcoincidencias resultantes. Para obtener más información, vea Alternancia y subexpresiones.

Utilizar referencias inversas

Puede hacer referencia a una subexpresión desde una expresión regular.

En una expresión regular, cada subcoincidencia guardada se almacena de izquierda a derecha tal como se encontró. Los números de búfer en los que se guardan las subcoincidencias comienzan en 1 y continúan hasta un máximo de 99 subexpresiones. Dentro de la expresión regular, puede obtener acceso a cada búfer a través de \n, donde n es uno o dos dígitos decimales que identifican un búfer concreto.

Una aplicación de referencias inversas ofrece la posibilidad de encontrar dos palabras idénticas repetidas juntas en el texto. Considere la frase siguiente:Is is the cost of of gasoline going up up?

Esta frase contiene varias palabras duplicadas. Sería útil idear alguna forma de corregir la frase sin tener que buscar duplicados de cada una de las palabras. La siguiente expresión regular de JScript emplea una única subexpresión para ello.

/\b([a-z]+) \1\b/gi

En este caso, toda la subexpresión está rodeada por paréntesis. Esa expresión, según especifica [a-z]+, incluye uno o varios caracteres alfabéticos. La segunda parte de la expresión regular es la referencia a la subcoincidencia guardada previamente, es decir, la segunda aparición de la palabra que acaba de coincidir con la expresión entre paréntesis. \1 se usa para especificar la primera subcoincidencia.

Los metacaracteres del límite de palabra \b garantizan que solo se detectan palabras independientes. En caso contrario, esta expresión identificaría de forma incorrecta frases como "es escaso" o "se separa".

En el siguiente ejemplo se enumeran las palabras duplicadas. Se demuestra cómo se pueden recuperar las coincidencias y subcoincidencias del código.

var result;

var re = /\b([a-z]+) \1\b/gi
var src = "Is is the cost of of gasoline going up up?"

// Get the first match.
result = re.exec(src);

while (result != null)
{
    // Show the entire match.
    print();
    print(result[0]);

    // Show the submatches.
    for (var index = 1; index < result.length; index++)
    {
        print("submatch " + index + ": " + result[index]);
    }

    // Get the next match.
    result = re.exec(src);
}

// Output:
//  Is is
//  submatch 1: Is

//  of of
//  submatch 1: of

//  up up
//  submatch 1: up

También puede consultar una subexpresión desde una cadena de reemplazo.

En el ejemplo siguiente se reemplazan dos palabras idénticas consecutivas por una única incidencia de la misma palabra utilizando la expresión regular anterior. En el método replace, $1 hace referencia a la primera subcoincidencia guardada. Si hay varias subcoincidencias, pude hacer referencia a ellas de forma secuencial, como $2, $3, etc.

var re = /\b([a-z]+) \1\b/gi
var src = "Is is the cost of of gasoline going up up?"
var result = src.replace(re, "$1");
print(result);
// Output:
//  Is the cost of gasoline going up?

En el siguiente ejemplo, se intercambia cada par de palabras en la cadena.

var re = /(\S+)(\s+)(\S+)/gi
var src = "The quick brown fox jumps over the lazy dog."
var result = src.replace(re, "$3$2$1");
print(result);
// Output:
//  quick The fox brown over jumps lazy the dog.

Vea también

Referencia

replace (Método)

Conceptos

Alternancia y subexpresiones

Otros recursos

Introducción a las expresiones regulares