Cuantificadores de JScript
Para los casos en los que no se puede especificar el número de caracteres que incluye una coincidencia, las expresiones regulares admiten el concepto de cuantificadores. Con los cuantificadores se puede especificar el número de veces que debe aparecer un elemento dado de una expresión regular para que se cumpla una coincidencia.
Qué miden los cuantificadores
Carácter |
Descripción |
---|---|
* |
Coincide cero o más veces con el carácter o subexpresión anterior. Por ejemplo, zo* coincide con z y con zoo. * equivale a {0,}. |
+ |
Coincide una o más veces con el carácter o subexpresión anterior. Por ejemplo, 'zo+' coincide con "zo" y con "zoo", pero no coincide con "z". + equivale a {1,}. |
? |
Coincide una vez o ninguna con el carácter o subexpresión anterior. Por ejemplo, do(do)? coincide con "da" en "da" o en "dado". ? equivale a {0,1} |
{n} |
n es un entero no negativo. Coincide exactamente n veces. Por ejemplo, o{2} no coincide con la o de doy pero coincide con las dos oes en cooperar. |
{n,} |
n es un entero no negativo. Coincide como mínimo n veces. Por ejemplo, 'o{2,}' no coincide con la "o" de "sol" pero coincide con todas las oes de "goooool". 'o{1,}' equivale a 'o+'. 'o{0,}' equivale a 'o*'. |
{n,m} |
m y n son enteros no negativos donde n < = m. Coincide n veces como mínimo y m veces como máximo. Por ejemplo, 'o{1,3}' coincide con las tres primeras oes de 'gooooool'. 'o{0,1}' equivale a 'o?'. Tenga en cuenta que no se puede incluir un espacio entre la coma y los números. |
Como los números de capítulos pueden ser fácilmente más de nueve en un documento extenso, se necesita un sistema para tratar números de capítulo de dos o tres dígitos. Los cuantificadores le permitirán hacerlo. La siguiente expresión regular coincide con encabezados de capítulo que tengan cualquier número de dígitos:
/Chapter [1-9][0-9]*/
Observe que el cuantificador aparece después de la expresión del intervalo. Por tanto, se aplica a toda la expresión del intervalo que, en este caso, especifica sólo dígitos del 0 al 9, ambos incluidos.
En este caso, no se utiliza el cuantificador + porque no es necesario que haya un dígito en la posición segunda o subsiguiente. El carácter comodín ? Tampoco se utiliza el carácter ? ya que limita los números de capítulos a dos dígitos solamente. Como mínimo debe coincidir un dígito después de Chapter y un carácter de espacio.
Si sabe que el número de capítulos está limitado a 99, puede utilizar la siguiente expresión para especificar como mínimo un dígito, aunque no más de dos.
/Chapter [0-9]{1,2}/
El inconveniente de la expresión anterior es que en los números de capítulos mayores que 99 sólo coincidirá con los dos primeros dígitos. Otro inconveniente es que Chapter 0 coincidiría. A continuación, se incluyen las expresiones más adecuadas para que sólo coincidan dos dígitos:
/Chapter [1-9][0-9]?/
o bien
/Chapter [1-9][0-9]{0,1}/
Los cuantificadores *, + y ? se conocen como expansivos porque coinciden con la mayor cantidad de texto posible. Sin embargo, en ocasiones es preferible obtener una coincidencia mínima.
Por ejemplo, supongamos que busca en un documento HTML la aparición del título de un capítulo encerrado en una etiqueta H1. Este texto aparece en el documento como:
<H1>Chapter 1: Introduction to Regular Expressions</H1>
La siguiente expresión coincide con todos los elementos comprendidos entre el símbolo menor que (<) de apertura y el símbolo mayor que (>) que cierra la etiqueta H1.
/<.*>/
Si sólo necesita hacer coincidir la etiqueta de apertura H1, la expresión siguiente no expansiva sólo coincide con <H1>.
/<.*?>/
Si el cuantificador ? se sitúa después de *, + o ? la expresión deja de ser una coincidencia expansiva y se convierte en una coincidencia no expansiva o mínima.