Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] Usando expressões regulares

Recommended Posts

Expressões regulares são uma sintaxe padrão paralocalização de patterns emstrings. 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 maissimples: determinar quantas vezes um patternsimples se repete, executando múltiplas ações em uma string.

 

Vamostomar como modelo uma máquina de caça-níqueis. Digamos que você tem 5 frutaspossíveis e 5 posições. Você pode representá-las com números em um array como [1, 1, 1, 1, 1], o quesignifica que todas as 5 posições têm a fruta1 associada a elas. Toda vez que ousuário puxa a alavanca, cada posição muda aleatoriamente. Agora digamos quevocê quer parar a mudança de posições quando um usuário conseguir 2 ou mais frutas domesmo tipo (por exemplo  [1, 2, 1, 3 ,5], no qual você pararia a posição 0e 2). Você pode fazer isso de duas maneiras. A primeira delas seria usar o loopatravés do array e usar indexOf ou outro método escrito porvocê, no entanto eu não consigo ver como isso seria fácil. A segunda maneiraseria 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úmerode 1 a 5 repete. Ao usar o código acima, podemos decidir qual número repete omaior 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 patternque estamos procurando, 'g' é a flagRegExp (significa global) - se nãousarmos essa flag, sempre teríamos 1 no nosso rastreamento, pois a busca pararia quando a primeira ocorrência de pattern fosse encontrada (da mesmamaneira que o indexOf devolve a posiçãodo primeiro lugar em que o pattern, ouelemento, é encontrada).

 

Outraaplicação simples de expressões regulares é a substituição de múltiplasocorrências de um pattern dentro deuma string. Por exemplo, digamos que temos h,e,l,l,o, ,w,o,r,l,d , e queremosretirar 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

Masse 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

Observeque 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 últimoexemplo é indicada somente se você tem termos de busca constantes. Como nesseexemplo nós estávamos sempre procurando por "," mas no nosso primeiroexemplo 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 encontrarnenhum artigo que descrevesse como o regexp pode ser usado com termos de buscavariá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

 

 

 

http://imasters.com.br/artigo/21384/flash/usando-expressoes-regulares

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.