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 restante 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…

  • Menu giratório animado em 3D com CSS
  • Downloadify:  Geração de arquivos no lado do cliente usando JavaScript e Flash
  • Animação de dobragem CSS 3D

  1. Estou me perguntando por que o senhor não poderia simplesmente escrever uma expressão mais simples para corresponder a

    [required-login]

    e depois negar a correspondência. Por exemplo

  2. 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ã

  3. 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*.

  • 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.