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