Sinalizadores e propriedades

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

A tabela a seguir lista os cinco sinalizadores que você pode definir para expressões regulares: Cada sinalizador pode ser acessado como uma propriedade do objeto da expressão regular.

Sinalizador

Propriedade

Descrição

g

global

Corresponde a mais de uma correspondência.

i

ignoreCase

Correspondência que não faz distinção entre maiúsculas e minúsculas. Aplica-se aos caracteres A Z e a z , mas não a caracteres estendidos como É e é .

m

multiline

Com esse sinalizador definido, $ e ^ pode corresponder ao início e ao fim de uma linha, respectivamente.

s

dotall

Com esse sinalizador definido, . (ponto) pode corresponder ao caractere de nova linha ( \n ).

x

extended

Permite expressões regulares estendidas. Você pode digitar espaços na expressão regular, que serão ignorados como parte do padrão. Isso permite digitar código de expressão regular de modo mais legível.

Observe que essas propriedade são somente leitura. Você pode definir os sinalizadores ( g , i , m , s , x ) quando definir uma variável de expressão regular, como se segue:

var re:RegExp = /abc/gimsx;

Entretanto, não é possível definir diretamente as propriedades nomeadas. Por exemplo, o código a seguir resulta em um erro:

var re:RegExp = /abc/; 
re.global = true; // This generates an error.

Por padrão, a menos que você os especifique na declaração de expressão regular, os sinalizadores não serão definidos e as propriedades de correspondência também são definidas como false .

De modo adicional, há duas outras propriedades de uma expressão regular:

  • A propriedade lastIndex especifica a posição de índice na string para a próxima chamada do método exec() or test() de uma expressão regular.

  • A propriedade source especifica a string que define a parte padrão da expressão regular.

O sinalizador g (global)

Quando o sinalizador g ( global ) não é incluído, uma expressão regular tem não mais do que uma correspondência. Por exemplo, com o sinalizador g não incluso na expressão regular, o método String.match() retorna somente uma substring de correspondência:

var str:String = "she sells seashells by the seashore."; 
var pattern:RegExp = /sh\w*/; 
trace(str.match(pattern)) // output: she

Quando o sinalizador g é definido, o método Sting.match() retorna várias correspondências, como se segue:

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

O sinalizador i (ignoreCase)

Por padrão, as correspondências de expressões regulares fazem distinção entre maiúsculas e minúsculas. Quando você define o sinalizador i ( ignoreCase ), a distinção entre maiúsculas e minúsculas é ignorada. Por exemplo, o s minúsculo na expressão regular não corresponde ao S maiúsculo, o primeiro caractere da string:

var str:String = "She sells seashells by the seashore."; 
trace(str.search(/sh/)); // output: 13 -- Not the first character

Com o sinalizador i definido, entretanto, a expressão regular corresponde ao S maiúsculo:

var str:String = "She sells seashells by the seashore."; 
trace(str.search(/sh/i)); // output: 0

O sinalizador i ignora a distinção entre maiúsculas e minúsculas somente para os caracteres A Z e a z , mas não para caracteres estendidos como É e é .

O sinalizador m (multiline)

Se o sinalizador m ( multiline ) não estiver definido, ^ corresponde ao início da string e $ corresponde ao fim da string. Se o sinalizador m estiver definido, esses caracteres corresponderão ao início e ao fim de uma linha, respectivamente. Considere a seguinte string, que inclui um caractere de nova linha:

var str:String = "Test\n"; 
str += "Multiline"; 
trace(str.match(/^\w*/g)); // Match a word at the beginning of the string.

Mesmo que o sinalizador g ( global ) esteja definido na expressão regular, o método match() corresponde a apenas uma substring, pois há apenas uma correspondência para ^ — o início da string. A saída é:

Test

Aqui está o mesmo código com o sinalizador m definido:

var str:String = "Test\n"; 
str += "Multiline"; 
trace(str.match(/^\w*/gm)); // Match a word at the beginning of lines. 

Neste momento, a saída inclui as palavras no início das linhas:

Test,Multiline

Observe que apenas o caractere \n sinaliza o fim de uma linha. Os caracteres a seguir não:

  • Caractere de retorno ( \r )

  • Caractere Unicode separador de linha ( \u2028 )

  • Caractere Unicode separador de parágrafo ( \u2029 )

O sinalizador s (dotall)

Se o sinalizador s ( dotall ou “dot all”) não estiver definido, um ponto ( . ) em um padrão de expressão regular não corresponde a um caractere de nova linha ( \n ). Portanto para o exemplo a seguir, não há nenhuma correspondência:

var str:String = "<p>Test\n"; 
str += "Multiline</p>"; 
var re:RegExp = /<p>.*?<\/p>/; 
trace(str.match(re)); 

Entretanto, se o sinalizador s estiver definido, o ponto corresponderá ao caractere de nova linha:

var str:String = "<p>Test\n"; 
str += "Multiline</p>"; 
var re:RegExp = /<p>.*?<\/p>/s; 
trace(str.match(re)); 

Nesse caso, a correspondência é a substring inteira dentro das tags <p> , incluindo o caractere de nova linha:

<p>Test 
Multiline</p>

O sinalizador x (extended)

As expressões regulares podem ser difíceis de ler, especialmente quando incluem muitos metasímbolos e metassequências. Por exemplo:

/<p(>|(\s*[^>]*>)).*?<\/p>/gi

Quando você usa o sinalizador x ( extended ) em uma expressão regular, qualquer espaço em branco digitado no padrão será ignorado. Por exemplo, a expressão regular a seguir é idêntica ao exemplo anterior:

/     <p    (>  | (\s* [^>]* >))    .*?    <\/p>  /gix

Se o sinalizador x estiver definido e você quiser uma correspondência com o caractere de espaço em branco, preceda o espaço em branco com uma barra invertida. Por exemplo, as duas expressões regulares a seguir são equivalentes:

/foo bar/ 
/foo \ bar/x

A propriedade lastIndex

A propriedade lastIndex especifica a posição de índice na string no qual a próxima pesquisa será iniciada. Essa propriedade afeta os métodos exec() e test() chamados em uma expressão regular que tem o sinalizador g definido como true . Por exemplo, considere o seguinte código:

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); 
}

A propriedade lastIndex é definida como 0 por padrão (para iniciar a pesquisa no início da string). Depois de cada correspondência, ela é definida para a posição de índice seguindo a correspondência. Portanto, a saída para o código precedente é a seguinte:

0 
5 
11 
18 
25 
36 
44

Se o sinalizador global estiver definido como false , os métodos exec() e test() não usam nem definem a propriedade lastIndex .

Os métodos match() , replace() e search() da classe String iniciam todas as pesquisas no início da string, independentemente da configuração da propriedade lastIndex da expressão regular utilizada na chamada do método. (Contudo, o método match() define lastIndex como 0.)

Você pode definir a propriedade lastIndex para ajustar a posição inicial na string para a correspondência da expressão regular.

A propriedade source

A propriedade source especifica a string que define a parte padrão de uma expressão regular. Por exemplo:

var pattern:RegExp = /foo/gi; 
trace(pattern.source); // foo