Búsqueda que no distingue entre mayúsculas y minúsculas

Resuelto Chris Boesing asked hace 16 años • 12 respuestas

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 /ibandera 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 /ibandera 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?

Chris Boesing avatar Oct 07 '08 16:10 Chris Boesing
Aceptado

Sí, usa .match, en lugar de .search. El resultado de la .matchllamada 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 indexOfasí:

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');
}
Dan avatar Oct 07 '2008 09:10 Dan

Reemplazar

var result= string.search(/searchstring/i);

con

var result= string.search(new RegExp(searchstring, "i"));
Sergey Ilinsky avatar Oct 07 '2008 09:10 Sergey Ilinsky