Estoy intentando que funcione una búsqueda sin distinción de mayúsculas y minúsculas con dos cadenas en JavaScript.
Normalmente sería así:
var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);
La bandera /i
sería para no distinguir entre mayúsculas y minúsculas.
Pero necesito buscar una segunda cadena; sin la bandera funciona perfectamente:
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);
Si añado la bandera /i
al ejemplo anterior se buscaría por searchstring y no por lo que hay en la variable "searchstring" (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 lograr esto?
Sí, utilice .match
, en lugar de .search
. El resultado de la llamada .match
devolverá la cadena real con la que se ha hecho la coincidencia, pero aún puede usarse como 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 esta es probablemente la forma más ordenada y obvia de hacer esto en JavaScript, pero ten en cuenta que es una expresión regular, y por lo tanto puede contener metacaracteres regex. Si quiere tomar la cadena de otra parte (por ejemplo, la entrada del usuario), o si quiere evitar tener que escapar un montón de metacaracteres, entonces probablemente sea mejor usar indexOf
de esta manera:
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');
}
Sustituir
var result= string.search(/searchstring/i);
con
var result= string.search(new RegExp(searchstring, "i"));
Si sólo busca una cadena en lugar de una expresión regular más complicada, puede utilizar indexOf()
, pero recuerde que debe poner en minúsculas las dos cadenas primero porque indexOf()
distingue entre mayúsculas y minúsculas:
var string="Stackoverflow is the BEST";
var searchstring="best";
// lowercase both strings
var lcString=string.toLowerCase();
var lcSearchString=searchstring.toLowerCase();
var result = lcString.indexOf(lcSearchString)>=0;
alert(result);
O en una sola línea:
var result = string.toLowerCase().indexOf(searchstring.toLowerCase())>=0;