Documentación de Flash CS3 |
|||
| Programación con ActionScript 3.0 > Utilización de expresiones regulares > Sintaxis de las expresiones regulares > Indicadores y propiedades | |||
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 |
|---|---|---|
|
|
|
Detecta todas las coincidencias. |
|
|
|
Detecta sin distinguir mayúsculas de minúsculas. Se aplica a los caracteres |
|
|
|
Con este indicador establecido, |
|
|
|
Con este indicador establecido, |
|
|
|
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 sólo 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; // Esto genera un 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:
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. source especifica la cadena que define la parte del patrón de la expresión regular.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)) // salida: 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; // El mismo patrón, pero esta vez con el indicador g establecido. trace(str.match(pattern)); // salida: she,shells,shore
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/)); // salida: 13 -- no es el primer carácter
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)); // salida: 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 é.
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)); // Detectar una palabra al principio de la cadena.
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)); // Detectar una palabra al principio de cada línea.
Esta vez, el resultado incluye las palabras al principio de ambas líneas:
Test,Multiline
Hay que tener en cuenta que sólo el carácter \n indica el final de una línea. Los caracteres siguientes no:
\r)\u2028)\u2029)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>
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 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 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
Flash CS3
Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios
Página actual: http://livedocs.adobe.com/flash/9.0_es/main/00000119.html