Los cuantificadores se utilizan para especificar repeticiones de caracteres o secuencias en patrones, de la manera siguiente:
Metacarácter de cuantificador
|
Descripción
|
*
(asterisco)
|
Detecta el elemento anterior repetido cero o más veces.
|
+
(más)
|
Detecta el elemento anterior repetido una o más veces.
|
?
(signo de interrogación)
|
Detecta el elemento anterior repetido cero veces o una sola vez.
|
{
n
}
{
n
,}
y
{
n
,
n
}
|
Especifica un cuantificador numérico o un rango de cuantificadores para el elemento anterior:
/A{27}/
detecta el carácter A repetido 27 veces.
/A{3,}/
detecta el carácter A repetido 3 o más veces.
/A{3,5}/
detecta el carácter A repetido entre 3 y 5 veces.
|
Se puede aplicar un cuantificador a un solo carácter, a una clase de caracteres o a un grupo:
-
/a+/
detecta el carácter
a
repetido una o más veces.
-
/\d+/
detecta uno o más dígitos.
-
/[abc]+/
detecta una repetición de uno o más caracteres, cada uno de las cuales puede ser
a
,
b
o
c
.
-
/(very, )*/
detecta la palabra
very
seguida de una coma y un espacio repetido cero o más veces.
Se pueden utilizar cuantificadores dentro de grupos delimitados por paréntesis que tengan cuantificadores aplicados. Por ejemplo, el siguiente cuantificador detecta cadenas como
word
y
word-word-word
:
/\w+(-\w+)*/
De manera predeterminada, las expresiones regulares realizan lo que se conoce como una
detección de la coincidencia más larga posible (greedy matching).
Cualquier subpatrón de la expresión regular (como
.*
) intentará detectar la mayor cantidad posible de caracteres en la cadena antes de pasar a la siguiente parte de la expresión regular. Por ejemplo, considérense la expresión regular y la cadena siguientes:
var pattern:RegExp = /<p>.*<\/p>/;
str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";
La expresión regular detecta toda la cadena:
<p>Paragraph 1</p> <p>Paragraph 2</p>
Sin embargo, si solo se desea detectar una agrupación
<p>...</p>
, se puede hacer lo siguiente:
<p>Paragraph 1</p>
Añadir un signo de interrogación (
?
) a continuación de cualquier cuantificador para convertirlo en un cuantificador
perezoso
, que detecta la coincidencia más corta posible. Por ejemplo, la siguiente expresión regular, que utiliza un cuantificador de este tipo,
*?
, detecta
<p>
seguido del mínimo número posible de caracteres, seguidos de
</p>
:
/<p>.*?<\/p>/
Hay que tener en cuenta los siguientes aspectos sobre los cuantificadores:
-
Los cuantificadores
{0}
y
{0,0}
no excluyen un elemento de una coincidencia.
-
No se deben combinar varios cuantificadores, como en
/abc+*/
.
-
El punto (.) no abarca líneas a menos que se establezca el indicador
s
(
dotall
), aunque esté seguido de un cuantificador
*
. Por ejemplo, considérese el fragmento de código siguiente:
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*<\/p>/;
trace(str.match(re)); // null;
re = /<p>.*<\/p>/s;
trace(str.match(re));
// output: <p>Test
// Multiline</p>
Para más información, consulte
Indicadores y propiedades
.