Quiero determinar si la cadena tiene al menos 2 mismos elementos de la 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
No estoy seguro de qué va a ser mejor: ¿una expresión regular o una función? Cualquiera estaría bien.
Intenté esto:
const array = ["!", "?"];
const string = "test!";
array.every(ar => !string.includes(ar));
Pero solo detecta si hay al menos 1 elementos de la matriz, no 2.
javascript
node.js
regex
function
Pleklo
fuente
fuente
Respuestas:
Puedes usar
Array#some
yString#split
para hacerlo:¿Como funciona?
¡Separemos (quiero decir
split()
arriba)!Array#some
, que prueba que al menos un elemento de la matriz debe pasar (es decir,?
o!
)char
y cuenta cuántas partes tenemosn
partes, significa que tenemosn-1
lugares dondechar
coinciden. (por ejemplo, 2|
divide una cadena en 3 partes:a|b|c
)fuente
Otra forma es utilizar un patrón con un grupo de captura y una dinámica creada clase de caracteres para
[!?]
y una referencia inversa\1
a lo que se captura en el grupo 1 para asegurarse de que hay 2 de la misma caracteres presentes.Demo de expresiones regulares
Por ejemplo
fuente
]
,^
, etc.Puede usar una cadena
split
y una matrizlength
como:EDITAR : Uso de for loop
fuente
Puede seguir una solución muy simple como a continuación. Divida la cadena usando el carácter en la matriz. verifique a la izquierda de la operación de división. Si la longitud es mínima 2, entonces devuelve verdadero, de lo contrario falso.
Aquí hay una muestra de jsFiddle: https://jsfiddle.net/sagarag05/qk8f2Lz7/
fuente
Cree una función que pueda ser útil para la
n
cantidad de ocurrencias para encontrarfuente
Use el bucle sobre la matriz y cuente la ocurrencia, luego verifique si la ocurrencia es mayor que 1.
fuente
Aquí hay un enfoque de truco regex. Podemos intentar eliminar todos los caracteres de la entrada que no sean parte de la clase de caracteres de los caracteres a buscar. Luego, afirme que quedan al menos dos caracteres distintos en la entrada.
La lógica aquí es bastante sencilla. Usando la entrada
!hello?
como ejemplo, primero eliminamos todos los caracteres que no son marcadores, dejándonos con!?
. Luego, usamos una expresión regular para afirmar que quedan al menos dos caracteres distintos. Esto es cierto para esta entrada, así que imprimimosMATCH
.Editar:
Para construir la alternancia regex desde su matriz de entrada use
join
:fuente
Hay una solución mucho más simple para esto:
Podemos convertirlo en una función para probar:
Nota: Mi código cambió algunas veces y al final estuvo cerca de la respuesta aceptada y no me di cuenta. Dicho esto, no es necesario restar nada, por lo que esa parte es innecesaria.
fuente
fuente