Expressões regulares são uma sintaxe padrão para
localização de patterns em
strings. Essa sintaxe permite que você procure por patterns complexas, muito úteis para validar campos de usuários
(como e-mails, telefones etc). No entanto, este artigo focará no seu uso mais
simples: determinar quantas vezes um pattern
simples se repete, executando múltiplas ações em uma string.
Vamos
tomar como modelo uma máquina de caça-níqueis. Digamos que você tem 5 frutas
possíveis e 5 posições. Você pode representá-las com números em um array como [1, 1, 1, 1, 1], o que
significa que todas as 5 posições têm a fruta1 associada a elas. Toda vez que o
usuário puxa a alavanca, cada posição muda aleatoriamente. Agora digamos que
você quer parar a mudança de posições quando um usuário conseguir 2 ou mais frutas do
mesmo tipo (por exemplo [1, 2, 1, 3 ,5], no qual você pararia a posição 0
e 2). Você pode fazer isso de duas maneiras. A primeira delas seria usar o loop
através do array e usar indexOf ou outro método escrito por
você, no entanto eu não consigo ver como isso seria fácil. A segunda maneira
seria usar expressões regulares como:
var fruitArray:Array = [1, 2, 1, 3, 5];
var regExp:RegExp;
var tmpStr:String = fruitArray.toString();
for (i = 1; i <= 5 ; i++)
{
regExp = new RegExp(String(i), 'g');
trace(String(i), ' repeats ',tempStr.match(regExp).length , 'times')
}
O exemplo acima irá rastrear quantas vezes cada número
de 1 a 5 repete. Ao usar o código acima, podemos decidir qual número repete o
maior número de vezes (no nosso caso, 1), então dá o loop entre as posições dos objetos e pede para pará-lo quando o número for 1. Observe esta linha: “regExp = new RegExp(String(i),
‘g’);” String(i) é o pattern
que estamos procurando, ‘g’ é a flag
RegExp (significa global) – se não
usarmos essa flag, sempre teríamos 1 no nosso rastreamento, pois a busca pararia quando a primeira ocorrência de pattern fosse encontrada (da mesma
maneira que o indexOf devolve a posição
do primeiro lugar em que o pattern, ou
elemento, é encontrada).
Outra
aplicação simples de expressões regulares é a substituição de múltiplas
ocorrências de um pattern dentro de
uma string. Por exemplo, digamos que temos h,e,l,l,o, ,w,o,r,l,d , e queremos
retirar todas as vírgulas. O jeito mais fácil de fazer isso é repetir “,” com
“”. Se fôssemos fazer assim:
var a:String='h,e,l,l,o, ,w,o,r,l,d';
trace(a.replace(',',''));
O resultado seria: he,l,l,o, ,w,o,r,l,d
Mas
se substituirmos a combinação por expressões regulares:
var a:String='h,e,l,l,o, ,w,o,r,l,d';
var r:RegExp=new RegExp(',','g');
trace(a.replace(r,''));
O resultado seria: hello world
Observe
que isso também pode ser alcançado desta maneira:
var a:String='h,e,l,l,o, ,w,o,r,l,d';
trace(a.replace(/,/g,''));
Observe também que a sintaxe usada no último
exemplo é indicada somente se você tem termos de busca constantes. Como nesse
exemplo nós estávamos sempre procurando por “,” mas no nosso primeiro
exemplo nosso termo de busca era variável, para uma versão longa, (
“regExp = new RegExp(String(i), ‘g’);” ) é mais fácil de usar.
Este artigo foi escrito pelo fato de que eu não consegui encontrar
nenhum artigo que descrevesse como o regexp pode ser usado com termos de busca
variáveis (os exemplos que encontrei não funcionaram para mim).
?
Texto original disponível em http://www.actionscript.org/resources/articles/986/1/Using-regular-expression/Page1.html



