En la tabla siguiente se muestran los cinco indicadores que se pueden establecer para expresiones regulares. Se puede acceder a cada indicador como una propiedad del objeto de expresión regular.
Indicador
|
Propiedad
|
Descripción
|
g
|
global
|
Detecta todas las coincidencias.
|
i
|
ignoreCase
|
Detecta sin distinguir mayúsculas de minúsculas. Se aplica a los caracteres
A
—
Z
y
a
—
z
, pero no a caracteres extendidos como
É
y
é
.
|
m
|
multiline
|
Con este indicador establecido,
$
y
^
pueden detectar el principio y el final de una línea, respectivamente.
|
s
|
dotall
|
Con este indicador establecido,
.
(punto) puede detectar el carácter de nueva línea (
\n
).
|
x
|
extended
|
Permite utilizar expresiones regulares extendidas. Estas expresiones permiten escribir espacios que se omitirán como parte del patrón. Esto facilita la lectura del código de una expresión regular.
|
Hay que tener en cuenta que estas propiedades son de solo lectura. Se puede establecer los indicadores (
g
,
i
,
m
,
s
,
x
) al establecer una variable de expresión regular, de la manera siguiente:
var re:RegExp = /abc/gimsx;
Sin embargo, las propiedades con nombre no se pueden establecer directamente. Por ejemplo, el siguiente código genera un error:
var re:RegExp = /abc/;
re.global = true; // This generates an error.
De manera predeterminada, los indicadores no se establecen y las propiedades correspondientes se establecen en
false
, a menos que se especifiquen en la declaración de la expresión regular.
Además, las expresiones regulares tienen otras dos propiedades:
-
La propiedad
lastIndex
especifica la posición del índice en la cadena que se debe utilizar para la siguiente llamada al método
exec()
o
test()
de una expresión regular.
-
La propiedad
source
especifica la cadena que define la parte del patrón de la expresión regular.
El indicador g (global)
Si el indicador
g
(
global
)
no
se incluye, la expresión regular detectará una sola coincidencia. Por ejemplo, si no se incluye el indicador
g
en la expresión regular, el método
String.match()
devuelve una sola cadena coincidente:
var str:String = "she sells seashells by the seashore.";
var pattern:RegExp = /sh\w*/;
trace(str.match(pattern)) // output: she
Si se establece el indicador
g
, el método
Sting.match()
devuelve varias coincidencias, como se indica a continuación:
var str:String = "she sells seashells by the seashore.";
var pattern:RegExp = /sh\w*/g;
// The same pattern, but this time the g flag IS set.
trace(str.match(pattern)); // output: she,shells,shore
El indicador i (ignoreCase)
De manera predeterminada, las expresiones regulares distinguen mayúsculas de minúsculas al detectar coincidencias. Si se establece el indicador
i
(
ignoreCase
), no se distinguirán mayúsculas de minúsculas. Por ejemplo, la
s
minúscula de la expresión regular no detecta la letra
S
mayúscula, el primer carácter de la cadena:
var str:String = "She sells seashells by the seashore.";
trace(str.search(/sh/)); // output: 13 -- Not the first character
Sin embargo, con el indicador
i
establecido, la expresión regular detecta la letra
S
mayúscula:
var str:String = "She sells seashells by the seashore.";
trace(str.search(/sh/i)); // output: 0
El indicador
i
no distingue mayúsculas de minúsculas únicamente para los caracteres
A
–
Z
y
a
–
z
, pero sí para caracteres extendidos como
É
y
é
.
El indicador m (multiline)
Si no se establece el indicador
m
(
multiline
),
^
detecta el principio de la cadena y
$
detecta el final de la cadena. Con
m
establecido, estos caracteres detectan el principio y el final de una línea, respectivamente. Considérese la siguiente cadena, que incluye un carácter de nueva línea:
var str:String = "Test\n";
str += "Multiline";
trace(str.match(/^\w*/g)); // Match a word at the beginning of the string.
Aunque se establezca el indicador
g
(
global
) en la expresión regular, el método
match()
detecta una sola subcadena, ya que hay una sola coincidencia con
^
, el principio de la cadena. El resultado es:
Test
A continuación se muestra el mismo código con el indicador
m
establecido:
var str:String = "Test\n";
str += "Multiline";
trace(str.match(/^\w*/gm)); // Match a word at the beginning of lines.
Esta vez, el resultado incluye las palabras al principio de ambas líneas:
Test,Multiline
Hay que tener en cuenta que solo el carácter
\n
indica el final de una línea. Los caracteres siguientes no:
-
Carácter de retorno (
\r
)
-
Carácter separador de línea Unicode (
\u2028
)
-
Carácter separador de párrafo Unicode (
\u2029
)
El indicador s (dotall)
Si no se establece el indicador
s
(
dotall
o "dot all"), un punto (
.
) en un patrón de expresión regular no detectará un carácter de nueva línea (
\n
). Así, en el siguiente ejemplo no se detecta ninguna coincidencia:
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*?<\/p>/;
trace(str.match(re));
Sin embargo, si se establece el indicador
s
, el punto detecta el carácter de nueva línea:
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*?<\/p>/s;
trace(str.match(re));
En este caso, la coincidencia es toda la subcadena entre las etiquetas
<p>
, incluido el carácter de nueva línea:
<p>Test
Multiline</p>
El indicador x (extended)
Las expresiones regulares pueden ser difíciles de leer, especialmente cuando incluyen muchos metasímbolos y metasecuencias. Por ejemplo:
/<p(>|(\s*[^>]*>)).*?<\/p>/gi
Si se utiliza el indicador
x
(
extended
) en una expresión regular, se omitirán los espacios en blanco que se escriban en el patrón. Por ejemplo, la siguiente expresión regular es idéntica a la del ejemplo anterior:
/ <p (> | (\s* [^>]* >)) .*? <\/p> /gix
Si se establece el indicador
x
y se desea detectar un carácter de espacio en blanco, se debe escribir una barra diagonal inversa inmediatamente antes del espacio en blanco. Por ejemplo, las dos expresiones normales siguientes son equivalentes:
/foo bar/
/foo \ bar/x
La propiedad lastIndex
La propiedad
lastIndex
especifica la posición de índice de la cadena en la que debe comenzar la siguiente búsqueda. Esta propiedad afecta a los métodos
exec()
y
test()
llamados en una expresión regular que tiene el indicador
g
establecido en
true
. Por ejemplo, considérese el fragmento de código siguiente:
var pattern:RegExp = /p\w*/gi;
var str:String = "Pedro Piper picked a peck of pickled peppers.";
trace(pattern.lastIndex);
var result:Object = pattern.exec(str);
while (result != null)
{
trace(pattern.lastIndex);
result = pattern.exec(str);
}
La propiedad
lastIndex
está establecida en 0 de manera predeterminada (para iniciar las búsquedas al principio de la cadena). Después de cada detección, se establece en la posición de índice siguiente a la de la coincidencia. Por tanto, el resultado del código anterior es el siguiente:
0
5
11
18
25
36
44
Si el indicador
global
está establecido en
false
, los métodos
exec()
y
test()
no utilizan ni establecen la propiedad
lastIndex
.
Los métodos
match()
,
replace()
y
search()
de la clase String inician todas las búsquedas desde el principio de la cadena, independientemente del valor de la propiedad
lastIndex
de la expresión regular utilizada en la llamada al método. (Sin embargo, el método
match()
establece
lastIndex
en 0.)
Se puede establecer la propiedad
lastIndex
para ajustar la posición de inicio en la cadena para la detección de expresiones regulares.
La propiedad source
La propiedad
source
especifica la cadena que define la parte del patrón de una expresión regular. Por ejemplo:
var pattern:RegExp = /foo/gi;
trace(pattern.source); // foo