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 metaseqüê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