Como diabos eu os enfrento?
Como qualquer coisa nova:
10 Study
20 Practice
30 goto 10
Estude
Acho que os professores mais bem-sucedidos começam a ensinar qualquer matéria, primeiro fornecendo um pouco de conhecimento sobre a matéria. É importante ter um contexto do que você está aprendendo e, mais importante, por que você está aprendendo.
É tudo correspondência de seqüência
Expressões regulares são um meio de combinar padrões no texto. É uma linguagem declarativa incorporada em várias outras linguagens de programação.
Gostaria de enfatizar que é uma linguagem declarativa; expressões regulares são úteis para expressar qual string corresponder, mas não expressam de maneira alguma como o programa deve fazer a correspondência. Por esse motivo, é possível usar expressões regulares muito rapidamente e muito lentamente na mesma linguagem de programação, simplesmente usando um analisador RegEx diferente.
O motivo da criação de expressões regulares é o mesmo para a criação da maioria das linguagens de programação: os programadores se viam executando a mesma tarefa complicada repetidamente e decidiram que desejavam uma maneira mais simples de escrever o código.
Alguns irão (e devem) reclamar da minha frase anterior dizendo algo como:
RegEx não torna um programa mais simples.
é verdade
O RegEx não simplifica um programa, o RegEx simplifica a escrita do programa. Você ainda precisa ser cuidadoso em seus testes para garantir que todos os casos corretos sejam correspondidos corretamente e todos os casos incorretos não. É realmente difícil testar "tudo" e, com padrões complicados, é realmente difícil testar "a maioria". Na pior das hipóteses, você ainda deve estar testando "alguns" casos.
vamos incorporar alguns exemplos. Escolhi obrigatoriamente o mecanismo RegEx do JavaScript porque posso testá-lo ao vivo no navegador facilmente e porque não preciso fazer nenhuma string escapar enquanto estiver usando literais RegEx.
Ao fazer a correspondência normal de cadeias, você testa um valor de cadeia em relação a outro. Eles podem vir de qualquer lugar, mas, no final, são necessárias duas seqüências de caracteres comparadas entre si:
if ( 'foo' == 'bar' ) doSomething();
Esse exemplo é péssimo porque nunca fará nada
if ( foo == 'bar' ) doSomething();
Muito melhor; agora, não sabemos com antecedência se algo será feito ou não. Agora podemos começar a aceitar a entrada do usuário:
if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();
Maravilhoso, agora os usuários podem bar
entrar e algo acontecerá, até que você receba relatórios de erros de usuários dizendo que "bar"
não está funcionando, ou que "BAR" não está funcionando, ou que digitaram BRA
100 vezes e nada acontece.
Ignorando os erros de ortografia e os caracteres extras,, 'bar' != 'BAR'
e os programadores precisam pensar em uma maneira de testar onde os caracteres estão no caso errado.
Solução simples, use toLowerCase
. Isso funciona maravilhosamente, mas e os usuários que usam inglês britânico sobre inglês americano quando você está correspondendo something == 'color'
? Agora você terá que combinar something == 'color' || somthing == 'colour'
.
Para encurtar a história, padrões simples se transformam em muitos códigos repetitivos muito rapidamente.
O exemplo de cores pode simplesmente ser combinado com:
/colou?r/.test( something )
uma sólida compreensão do básico das expressões regulares pode reduzir significativamente a quantidade de tempo que você perde reinventando a roda.
Onde estudar
A maioria dos idiomas que implementam expressões regulares possui pelo menos um recurso disponível para a sintaxe específica do uso de expressões regulares nesse idioma. Um para JavaScript pode ser encontrado no MDN
Leia-o.
tudo isso.
depois leia novamente.
Leva tempo para aprender, pense nisso como um investimento: uma hora para aprender o RegEx agora economiza uma hora na próxima vez em que você precisar fazer alguma correspondência de padrões de sequência e depois outra hora na próxima vez.
Prática
Depois de ler tudo sobre o RegEx, você provavelmente não entenderá a maior parte. Isso porque você não está realmente fazendo nada com isso.
Mencionei por que escolhi o JS para este exemplo, exorto você a mexer com ele no seu navegador. É rápido e você pode fazer isso corretamente na sua barra de URL.
O JS tem algumas maneiras diferentes e simples de usar o RegEx:
string.match( regex )
regex.exec( string )
regex.test( string )
Começando com algo simples como:
javascript:'color'.match(/colou?r/);
é uma maneira fácil de colocar o pé na porta. Brinque com ele, quebre e veja o que combina e o que não combina.
Quando você ficar preso na prática, continue 30
. Você precisa ler para aprender mais, mas precisa praticar para entender verdadeiramente o que aprendeu.