Estou tentando criar uma regex que busque um certo grupo de letras dentro de uma string. Cada letra do grupo precisa aparecer pelo menos uma vez dentro da string. Até então estou com a seguinte regex:
/[hey]+/ig
Porém não funciona, caso faça o teste com a string hello ele está retornando true mas deveria retornar false porque a letra y não aparece nenhuma vez. Alguma dica?
Nao entendi o que precisa exatamente… tem como dar exemplos de strings que deveriam dar match ou nao na regex que você quer?
De qualquer forma, os símbolos [] funcionam como um OU. No seu regex de exemplo /[hey]+/ig
, vai dar match em qualquer combinaçao dessas três letras: “hey”, “eyh”, “eehhyy”, “eeaaee” (2x nessa)
vamos la
se vc quer ver se uma letra ( h
) sempre aparece vc pode fazer
/h/ig
se vc quer ver se duas letra ( he
) sempre aparecem vc pode fazer
/h.*e|e.*h/ig
como uma expressão regular percorre do começo ao fim, vc tem duas possibilidades: ou h aparece antes do e, ou o contrario.
agora imagine com 3 letras. vc em 6 combinações. algo como
/h.*e.*y|h.*y.*e|e.*y.*h|e.*h.*y|y.*e.*h|y.*h.*e/ig
e assim, alem de complexo isso não é nada performatico.
o que vc poderia fazer para deixar isso mais legivel seria.
-
não usar expressões regulares. vc quer descobrir se o indexOf
de cada letra é diferente de -1, isso vc verifica de forma bem simples com &&
-
vc ordena a string e ai vc pode verificar se /e.*h.*y/gi
esta presente. em geral não vale muito a pena
Basicamente eu quero que seja um match caso possua as 3 letras em qualquer lugar da string, por exemplo: eyh deveria ser true, ehy tambem deveria ser true, smdbusjsbensbsbynsndh tamben deveria ser true.
eyl deve retornar false pois nao tem a letra h.
Pois é, entao veja a resposta do @peczenyj. ^^^
Só tem um pequeno problema, a string hey não sou eu que escolho, é um valor que chega de una variável, portanto não tenho como deixar hardcoded.