Boa tarde pessoal, estou tentando montar um REGEX para validar uma query de busca booleana (search boolean) onde os operadores aceitos são: "", (), AND, NOT, OR. Estou validando abertura e fechamento de aspas, mas também não sei se a melhor maneira, pois estou validando a abertura de qualquer um dos dois e fazendo um while nas aspas e um switch nos parenteses para validar se ambos os casos estão fechados.
Sendo validos os casos acima, tenho que verificar se a sintaxe está correta antes de fazer uma chamada para o backend (estou usando angular e validando no controller através do ng-change do input (também não sei se seria a melhor maneira, penso no futuro tirar para uma diretiva));
Exemplos válidos:
- (programador AND estagiario) OR "analista de sistemas"
- Analista de Sistemas AND NOT programador
- NOT analista AND (NOT frontend AND backend) OR "fullstack"
Inválidos:
- (programador ou analista)
- (programador OR analista
- "programador frontend AND analista OR NOT diretor
Bem, +- isso, o Linkedin utiliza essa busca, se tiver alguma maneira mais elegante e fácil de fazer essa implementação (ou plugin, porque procurei e não encontrei nada que fizesse no input, somente com input´s pré selecionados, o qual não foi aceito :( )
O que comentei acima foi isso que cheguei, mas não é uma validação correta e ainda não sei como ajustar.
Estou com dificuldade em 'juntar' as validações.
<code>/(?:^ *)?(?:\( *|())[A-Z](?: +(?:AND|OR) +[A-Z])?(?: *\)|)/</code>
Agradeço desde já a colaboração