Alternancia y agrupamiento

Actualización: noviembre 2007

La alternancia utiliza el carácter | para permitir una elección entre dos o más alternativas. Por ejemplo, se puede expandir la expresión regular de encabezados de capítulo para que devuelva más de un encabezado. No obstante, esto no es tan sencillo como parece. La alternancia coincide con la mayor expresión posible a cualquier lado del carácter |.

Ejemplo

La expresión que se muestra a continuación puede parecer que coincide con las palabras Chapter o Section seguidas de uno o dos dígitos, que aparezcan al principio o al final de una línea:

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

Sin embargo, la expresión regular anterior coincide con la palabra Chapter al comienzo de una línea o con la palabra Section y cualquier número que vaya después de Section al final de la línea. Si la cadena de entrada es Chapter 22, la expresión anterior sólo coincide con la palabra Chapter. Si la cadena de entrada es Section 22, la expresión sólo coincide con Section 22.

Para conseguir que la expresión regular se ajuste mejor a la cadena buscada, se pueden utilizar los paréntesis para limitar el ámbito de la alternancia, de este modo se garantiza que sólo se aplica a las dos palabras Chapter y Section. No obstante, los paréntesis también se utilizan para crear subexpresiones y posiblemente capturarlas para su uso posterior, de este tema se trata en la sección de referencias inversas. Si agrega paréntesis en el lugar adecuado de la expresión regular anterior, conseguirá que la expresión regular coincida con Chapter 1 o Section 3.

En la siguiente expresión regular se utilizan paréntesis para agrupar Chapter y Section de forma que la expresión funcione correctamente:

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

Aunque estas expresiones funcionan correctamente, los paréntesis alrededor de Chapter|Section también hacen que se capture cualquiera de las dos palabras coincidentes para su uso futuro. Puesto que sólo hay un conjunto de paréntesis en la expresión anterior, sólo se captura una subcoincidencia. Se puede hacer referencia a esta subcoincidencia mediante las propiedades $1-$9 del objeto RegExp.

En el ejemplo anterior, los paréntesis se pueden utilizar únicamente para agrupar una opción entre las palabras Chapter y Section. Para impedir que la coincidencia se guarde para un uso posterior, incluya los metacaracteres ?: antes del modelo de expresión regular entre paréntesis. La siguiente modificación proporciona la misma capacidad sin guardar la subcoincidencia:

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

Además de los metacaracteres ?:, hay otros dos metacaracteres sin captura que crean lo que se denomina coincidencias de búsquedas anticipadas. Una búsqueda anticipada positiva, especificada mediante ?=, coincide con la cadena de búsqueda en cualquier punto en el que comience un modelo de expresión regular coincidente entre paréntesis. Una búsqueda anticipada negativa, especificada mediante ?!, coincide con la cadena de búsqueda en cualquier punto en el que comience una cadena que no coincida con el modelo de expresión regular.

Por ejemplo, supongamos que trabaja con un documento que contiene referencias a Windows 3.1, Windows 95, Windows 98 y Windows NT. Supongamos también que tiene que actualizar el documento cambiando todas las referencias a Windows 95, Windows 98 y Windows NT por Windows 2000. La siguiente expresión regular, que es un ejemplo de búsqueda anticipada positiva, coincide con Windows 95, Windows 98 y Windows NT:

/Windows(?=95 |98 |NT )/

Una vez que se encuentra la coincidencia, inmediatamente comienza la búsqueda de la siguiente coincidencia después del texto coincidente y sin incluir los caracteres de la búsqueda anticipada. Por ejemplo, si la expresión anterior coincide con Windows 98, la búsqueda se reanuda después de Windows y no después de 98.

Vea también

Conceptos

Referencias inversas en JScript

Otros recursos

Introducción a las expresiones regulares