Por algum motivo, acho que as expressões regulares podem resolver todos os problemas e, por algum motivo, sempre descubro que a expressão regular que estou tentando criar é muito complicada e provavelmente não é o melhor caminho para obter o que quero. Caso em questão: precisei criar uma expressão regular para não corresponder a uma string. I não queira corresponder a uma string que inclua [requires-login]
mas deseja corresponder a todo o resto. Vamos deixar de lado o porquê por enquanto, veja como consegui o que queria:
// Adding extra forward slashes for "[" and "]" var regex = '^(?!.*?\\[requires-login\\])'; // Compile var re = new RegExp(regex);
Então, por que eu quero fazer isso? Em meus testes internos do lado do cliente, marco os testes que exigem login como [requires-login]
e, se um nome de usuário e uma senha não forem passados pela linha de comando, quero ignorar esses testes. Nesse caso, aproveito a função grep
do intern para corresponder aos testes sem a string fornecida. Prefiro marcar alguns testes com [requires-login]
em vez de marcar a maioria deles como [no-login]
.
Às vezes, o senhor quer fazer coisas no mundo do desenvolvimento da Web que não são ideais, mas simplesmente precisa realizá-las dentro de um determinado conjunto de parâmetros. Este é um desses casos. No final, o senhor precisa fazer com que isso aconteça e, nesse caso, eu fiz isso!
Expressões regulares para o resto de nós
Mais cedo ou mais tarde, o senhor se deparará com uma expressão regular. Com sua sintaxe enigmática, documentação confusa e enorme curva de aprendizado, a maioria dos desenvolvedores se contenta em copiá-las e colá-las do StackOverflow e torcer para que funcionem. Mas e se o senhor pudesse decodificar as expressões regulares e aproveitar seu poder? Em…
-
Tenho que me adaptar à API do Intern, e isso significa usar
grep
, que requer um regex. Caso contrário, eu concordaria com o senhor. -
O senhor "tem que se curvar para"... parece uma falha. O que há de tão bom nessa estagiária que a torna obrigatória em seu fluxo de trabalho? (Isenção de responsabilidade: não sei nada sobre isso).
-
O senhor poderia facilmente argumentar que o Intern que permite escrever um regex é o máximo em configurabilidade.
Já usei o Regex Coach no passado, mas o abandonei pelo RegexBuddy. Não é uma ferramenta gratuita, mas acho que está entre as melhores do mercado.
Obrigado, David. Como uma pergunta complementar, como o senhor marca os testes no intern?
O que significa o comentário sobre "extra forward slashes"? Não consigo ver nenhuma barra.
-
Chirag
Acho que ele quis dizer "barras para trás"
Olá, David,
Concordo plenamente que as expressões regulares podem resolver muitos problemas, especialmente quando escrevemos programas de pesquisa e códigos de validação complexos e sofisticados. Elas facilitam muito a vida do senhor ao reduzir várias linhas de código em apenas uma. Mas, para aplicá-las, o senhor precisa aprendê-las e aprendê-las requer algum esforço, pelo menos o básico deve estar claro.
Gabriel
Obrigado, David! Era exatamente o que eu precisava. De fato, também me deparei com uma situação embaraçosa e a única solução foi descobrir essa regex.
Estou me perguntando por que o senhor não poderia simplesmente escrever uma expressão mais simples para corresponder a
e depois negar a correspondência. Por exemplo
ArugulaExpression
Seu exemplo pode ser para um "cenário não ideal", mas posso imaginar muitas situações comuns que exigem a correspondência de uma parte e, em seguida, a não correspondência de outra parte.
Agradeço ao senhor por essa e por todas as outras lições curtas.
- fã
MaxArt
Lembre-se de que as expressões regulares costumam ser bastante lentas, portanto, para o seu caso, talvez seja melhor usar outra abordagem. Nesse caso, o uso clássico de
indexOf
pode ser melhor... e mais claro, também. Na verdade, outro ponto negativo é que os regexes são muito mais difíceis de entender e, principalmente, de *manter*.