Indicadores y propiedades

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

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