Estoy tratando de obtener una búsqueda que no distinga entre mayúsculas y minúsculas con dos cadenas en JavaScript funcionando.
Normalmente sería así:
var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);
La /i
bandera sería para mayúsculas y minúsculas.
Pero necesito buscar una segunda cadena; sin la bandera funciona perfecto:
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);
Si agrego el /i
indicador al ejemplo anterior, buscaría la cadena de búsqueda y no lo que está en la variable "cadena de búsqueda" (el siguiente ejemplo no funciona):
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);
¿Cómo puedo conseguir esto?
fuente
string.match(/best/i);
.match
usarías para la comparación booleana? Busca más allá del primer resultado. Debe detenerse después del primer partido que.test
o.search
hacer. Comprueba el rendimiento aquí .toLowerCase
Lo más probable es que falle la Prueba de Turquía ( moserware.com/2008/02/does-your-code-pass-turkey-test.html ) y problemas de conversión de casos similares. No estoy seguro de cómo loReGex
maneja, pero si tuviera que adivinar diría mejor.var text = "best"; var exp = new RegExp(test, "i");
. Esto es lo mismo que/best/i
.Reemplazar
con
fuente
s = 'a[b'; r = new RegExp(s)
da como resultado un error de sintaxis (clase de caracteres sin terminar)Si solo está buscando una cadena en lugar de una expresión regular más complicada, puede usar
indexOf()
, pero recuerde poner en minúscula ambas cadenas primero porqueindexOf()
distingue entre mayúsculas y minúsculas:O en una sola línea:
fuente
Supongamos que queremos encontrar la variable de cadena
needle
en la variable de cadenahaystack
. Hay tres trampas:string.toUpperCase
ystring.toLowerCase
. Utilice una expresión regular que ignore mayúsculas y minúsculas. Por ejemplo,var needleRegExp = new RegExp(needle, "i");
seguido deneedleRegExp.test(haystack)
.needle
. Tenga cuidado de queneedle
no contenga ninguna expresión especial de caracteres especiales . Escapar de estos utilizandoneedle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
.needle
yhaystack
, simplemente ignorando mayúsculas y minúsculas, asegúrese de agregar"^"
al comienzo y"$"
al final de su constructor de expresiones regulares.Teniendo en cuenta los puntos (1) y (2), un ejemplo sería:
fuente
ES6 +:
includes()
devuelvetrue
sisearchString
aparece en una o más posiciones o defalse
otra manera.fuente
Si le preocupa el caso de "clase de caracteres no terminados", sería útil eliminar todos los caracteres no alfanuméricos:
fuente
Me gusta la respuesta de @ CHR15TO, a diferencia de otras respuestas que he visto en otras preguntas similares, esa respuesta realmente muestra cómo escapar correctamente de una cadena de búsqueda proporcionada por el usuario (en lugar de decir que sería necesario sin mostrar cómo).
Sin embargo, todavía es bastante torpe, y posiblemente relativamente más lento. Entonces, ¿por qué no tener una solución específica para lo que probablemente sea un requisito común para los codificadores? (¿Y por qué no incluirlo en la ES6 API BTW?)
Mi respuesta [ https://stackoverflow.com/a/38290557/887092] en una pregunta similar permite lo siguiente:
fuente
Hay dos formas de comparación entre mayúsculas y minúsculas:
Convierta cadenas en mayúsculas y luego compárelas usando el operador estricto (
===
). Cómo el operador estricto trata los operandos lee cosas en: http://www.thesstech.com/javascript/relational-logical-operatorsCoincidencia de patrones utilizando métodos de cadena:
Utilice el método de cadena "buscar" para la búsqueda sin distinción entre mayúsculas y minúsculas. Lea sobre la búsqueda y otros métodos de cadena en: http://www.thesstech.com/pattern-matching-using-string-methods
fuente
Hago esto a menudo y uso un prototipo simple de 5 líneas que acepta varargs. Es rápido y funciona en todas partes .
fuente
Puedes poner todo en minúsculas:
fuente
Noté que si el usuario ingresa una cadena de texto pero deja la entrada sin seleccionar ninguna de las opciones de autocompletar, no se establece ningún valor en la entrada oculta, incluso si la cadena coincide con una en la matriz. Entonces, con la ayuda de las otras respuestas, hice esto:
fuente