Búsqueda que no distingue entre mayúsculas y minúsculas
Estoy intentando realizar 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 no distingue entre 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 la /i
bandera al ejemplo anterior, buscará la cadena de búsqueda y no lo que hay 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?
Sí, usa .match
, en lugar de .search
. El resultado de la .match
llamada devolverá la cadena real que coincidió, pero aún se puede usar como un valor booleano.
var string = "Stackoverflow is the BEST";
var result = string.match(/best/i);
// result == 'BEST';
if (result){
alert('Matched');
}
Usar una expresión regular como esa es probablemente la forma más ordenada y obvia de hacerlo en JavaScript, pero tenga en cuenta que es una expresión regular y, por lo tanto, puede contener metacaracteres de expresiones regulares. Si desea tomar la cadena de otro lugar (por ejemplo, entrada del usuario), o si desea evitar tener que escapar de muchos metacaracteres, entonces probablemente sea mejor usarlo indexOf
así:
matchString = 'best';
// If the match string is coming from user input you could do
// matchString = userInput.toLowerCase() here.
if (string.toLowerCase().indexOf(matchString) != -1){
alert('Matched');
}
Reemplazar
var result= string.search(/searchstring/i);
con
var result= string.search(new RegExp(searchstring, "i"));