Compartir a través de


Alternancia y subexpresiones

La alternancia de una expresión regular permite agrupar opciones entre dos o más alternativas. Básicamente, se puede especificar "esto O lo otro" en un modelo.

Las subexpresiones permiten encontrar coincidencias de un modelo en el texto de búsqueda y dividir la coincidencia en subcoincidencias independientes. El programa puede recuperar las subcoincidencias resultantes. Las subexpresiones también permiten cambiar el formato del texto, tal y como se describe en Referencias inversas en JScript.

Para obtener más información sobre expresiones regulares, vea Crear expresiones regulares y Sintaxis de expresiones regulares.

Alternancia

Puede utilizar el carácter de barra vertical (|) para especificar una opción entre dos o más alternativas. Esto se conoce como alternancia. Se buscan coincidencias con la mayor expresión posible situada a cualquier lado del carácter |. Quizás crea que la siguiente expresión de JScript coincide con la palabra "Chapter" o "Section" seguida de uno o dos dígitos.

/Chapter|Section [1-9][0-9]{0,1}/

En cambio, la expresión regular coincide con la palabra "Chapter" o la palabra "Section" y cualquier número que vaya detrás. Si la cadena que se busca es "Section 22", la expresión coincide con "Section 22". Sin embargo, si la cadena que se busca es "Chapter 22", la expresión coincide con el palabra "Chapter" y no con "Chapter 22".

Alternancia con paréntesis

Puede usar los paréntesis para limitar el ámbito de la alternancia, es decir, para asegurarse de que solo se aplica a los dos palabras "Chapter" y "Section". Con los paréntesis, puede hacer que la expresión regular coincida con "Chapter 1" o "Section 3".

Los paréntesis, sin embargo, también se usan para crear una subexpresión. El programa puede recuperar las subcoincidencias resultantes.

En la siguiente expresión regular de JScript se usan paréntesis para agrupar "Chapter" y "Section". Las coincidencias posibles incluirán "Chapter" seguido de un número.

/(Chapter|Section) [1-9][0-9]{0,1}/

Los paréntesis en torno a Chapter|Section también hacen que cualquiera de las dos palabras coincidentes se guarden para su uso futuro.

En el siguiente ejemplo se muestra cómo se pueden recuperar coincidencias y subcoincidencias del código. Como solo hay un conjunto de paréntesis en la expresión anterior, solo se guarda una subcoincidencia.

var re = /(Chapter|Section) [1-9][0-9]{0,1}/g
var src = "Chapter 50  Section 85"
ShowMatches(src, re);

// Output:
//  Chapter 50
//  submatch 1: Chapter

//  Section 85
//  submatch 1: Section

// Perform a search on a string by using a regular expression,
// and display the matches and submatches.
function ShowMatches(src, re)
{
    var result;

    // 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);
    }
}

Alternancia sin subcoincidencias guardadas

En el ejemplo anterior, los paréntesis se pueden usar únicamente para agrupar una opción entre las palabras "Chapter" y "Section".

Para evitar que la subcoincidencia se guarde para su uso posterior, puede especificar la subexpresión (?:modelo). En el ejemplo siguiente se realiza la misma operación que en el ejemplo anterior pero sin guardar la subcoincidencia.

var re = /(?:Chapter|Section) [1-9][0-9]{0,1}/g
var src = "Chapter 50  Section 85"
ShowMatches(src, re);
// Output:
//  Chapter 50
//  Section 85

Subexpresiones

Al agregar paréntesis a una expresión regular, se crea una subexpresión. El programa puede recuperar las subcoincidencias resultantes.

En el siguiente ejemplo, la expresión regular contiene tres subexpresiones. Las cadenas de subcoincidencia se muestran con cada coincidencia.

var re = /(\w+)@(\w+)\.(\w+)/g
var src = "Please send mail to george@contoso.com and someone@example.com. Thanks!"
ShowMatches(src, re);
// The ShowMatches function is provided earlier.

// Output:
//  george@contoso.com
//  submatch 1: george
//  submatch 2: contoso
//  submatch 3: com

//  someone@example.com
//  submatch 1: someone
//  submatch 2: example
//  submatch 3: com

En el siguiente ejemplo se descompone un indicador uniforme de recursos (URI) en sus componentes.

La primera subexpresión entre paréntesis guarda la parte del protocolo de la dirección web. Coincide con cualquier palabra que preceda a los dos puntos y a las dos barras diagonales. La segunda subexpresión entre paréntesis guarda la parte de la dirección del dominio. Coincide con cualquier secuencia de caracteres que no incluya el carácter de barra diagonal (/) o el carácter de dos puntos (:). La tercera subexpresión entre paréntesis guarda un número de puerto del sitio web, si se ha especificado alguno. Coincide con cero o más dígitos que siguen al carácter de dos puntos. La cuarta subexpresión entre paréntesis guarda la información relativa a la ruta de acceso y/o la página especificada por la dirección web. Coincide con cero o más caracteres distintos del carácter de almohadilla (#) o del carácter de espacio en blanco.

var re = /(\w+):\/\/([^\/:]+)(:\d*)?([^# ]*)/gi;
var src = "https://msdn.microsoft.com:80/scripting/default.htm";
ShowMatches(src, re);

// Output:
//  https://msdn.microsoft.com:80/scripting/default.htm
//  submatch 1: http
//  submatch 2: msdn.microsoft.com
//  submatch 3: :80
//  submatch 4: /scripting/default.htm

Búsquedas anticipadas positivas y negativas

Una búsqueda anticipada positiva es una búsqueda en la que, después de encontrar una coincidencia, la búsqueda de la siguiente coincidencia comienza antes del texto coincidente. La coincidencia no se guarda para uso posterior. Para especificar una búsqueda anticipada positiva, use la sintaxis (?=modelo).

En el ejemplo siguiente, se realiza una búsqueda para determinar si una contraseña tiene entre 4 y 8 caracteres y contiene al menos un dígito.

En la expresión regular, .*\d busca cualquier número de caracteres seguido por un dígito. En la cadena de búsqueda "abc3qr", coincide con "abc3." Antes, y no después, de esa coincidencia, .{4,8} coincide con una cadena de entre 4 y 8 caracteres. Esto coincide con "abc3qr".

^ y $ especifican las posiciones al comienzo y al final de la cadena buscada. De este modo, no se mostrará una coincidencia si la cadena buscada contiene algún carácter fuera de los caracteres coincidentes.

var re = /^(?=.*\d).{4,8}$/gi
var src = "abc3qr"
ShowMatches(src, re);
// The ShowMatches function is provided earlier.
// Output:
//  abc3qr

Una búsqueda anticipada negativa busca una cadena que no coincide con el modelo de la expresión anticipada negativa. Una vez que se encuentra una coincidencia, la búsqueda de la siguiente coincidencia se inicia antes del texto coincidente. La coincidencia no se guarda para uso posterior. Para especificar una búsqueda anticipada negativa, use la sintaxis (?!modelo).

En el ejemplo siguiente, se buscan palabras que no empiecen por "th".

En la expresión regular, \b coincide con un límite de palabra. En la cadena buscada " quick ", coincide con el primer espacio. (?!th) coincide con una cadena distinta de "th". Coincide con "qu". Antes de esa coincidencia, \w+ coincide con una palabra. Esto coincide con "quick".

var re = /\b(?!th)\w+\b/gi
var src = "The quick brown fox jumps over the lazy dog."
ShowMatches(src, re);
// Output:
//  quick
//  brown
//  fox
//  jumps
//  over
//  lazy
//  dog

Vea también

Conceptos

Referencias inversas en JScript

Otros recursos

Introducción a las expresiones regulares