Eu quero determinar se a string tem pelo menos 2 mesmos elementos da matriz
const array = ["!", "?"];
const string1 = "!hello"; // should return false
const string2 = "!hello?"; // should return false
const string3 = "!hello!"; // should return true
const string4 = "hello ??"; // should return true
const string5 = "hello ?test? foo"; // should return true
const string6 = "hello ?test ?? foo"; // should return true
Não tenho certeza do que será melhor: uma expressão regular ou uma função? Qualquer um seria bom.
Eu tentei isso:
const array = ["!", "?"];
const string = "test!";
array.every(ar => !string.includes(ar));
Mas ele detecta apenas se houver pelo menos 1 elementos da matriz, não 2.
javascript
node.js
regex
function
Pleklo
fonte
fonte
Respostas:
Você pode usar
Array#some
eString#split
fazer isso:Como funciona?
Vamos nos separar (eu quero dizer
split()
)!Array#some
, que testa que pelo menos um elemento da matriz deve passar (ou seja,?
ou!
)char
e conte quantas partes temosn
peças, significa que temosn-1
lugares onde aschar
correspondências. (por exemplo, 2|
divide uma string em 3 partesa|b|c
:)fonte
Outra maneira é usar um padrão com um grupo de captura e um criado dinamicamente classe de personagem para
[!?]
e uma referência anterior\1
ao que é capturado no grupo 1 para certificar-se há 2 do mesmo personagens presentes.Regex demo
Por exemplo
fonte
]
,^
, etc.Você pode usar string
split
e arraylength
como:EDIT : Usando para loop
fonte
Você pode seguir uma solução muito simples como abaixo. Divida a sequência usando o caractere na matriz. verifique a esquerda da operação de divisão. Se o comprimento for mínimo 2, retorne true, caso contrário false.
Aqui está uma amostra do jsFiddle: https://jsfiddle.net/sagarag05/qk8f2Lz7/
fonte
Crie uma função que possa ser útil para o
n
número de ocorrências encontrarfonte
Use loop over array e conte a ocorrência e verifique se a ocorrência é maior que 1.
fonte
Aqui está uma abordagem de truque de regex. Podemos tentar remover todos os caracteres da entrada que não fazem parte da classe de caracteres a serem encontrados. Em seguida, afirme que existem pelo menos dois caracteres distintos na entrada.
A lógica aqui é bastante direta. Usando a entrada
!hello?
como exemplo, primeiro removemos todos os caracteres não marcadores, deixando-nos com!?
. Em seguida, usamos um regex para afirmar que há pelo menos dois caracteres distintos. Isso é verdade para esta entrada, por isso imprimimosMATCH
.Editar:
Para criar a alternância regex a partir de sua matriz de entrada, use
join
:fonte
Existe uma solução muito mais simples para isso:
Podemos transformá-lo em uma função para testar:
Nota: Meu código mudou algumas vezes e, no final, estava próximo da resposta aceita, e eu não percebi. Dito isto, você não precisa subtrair nada, portanto essa parte é desnecessária.
fonte
fonte