Jeg prøver å få et case-insensitive søk med to strenger i JavaScript til å fungere.
Normalt ville det vært slik:
var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);
Flagget /i
er for å skille mellom store og små bokstaver.
Men jeg må søke etter en annen streng; uten flagget fungerer det perfekt:
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);
Hvis jeg legger til /i
-flagget i eksemplet ovenfor, vil den søke etter searchstring og ikke etter det som er i variabelen "searchstring" (neste eksempel fungerer ikke):
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);
Hvordan kan jeg oppnå dette?
Ja, bruk .match
i stedet for .search
. Resultatet fra .match
-kallet vil returnere selve strengen som ble matchet, men den kan fortsatt brukes som en boolsk verdi.
var string = "Stackoverflow is the BEST";
var result = string.match(/best/i);
// result == 'BEST';
if (result){
alert('Matched');
}
Å bruke et slikt regulært uttrykk er sannsynligvis den enkleste og mest åpenbare måten å gjøre det på i JavaScript, men husk at det er et regulært uttrykk, og dermed kan inneholde regex-metategn. Hvis du vil hente strengen fra et annet sted (f.eks. brukerinndata), eller hvis du vil unngå å måtte unnslippe mange metategn, er det sannsynligvis best å bruke indexOf
på denne måten:
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');
}
Bytte ut
var result= string.search(/searchstring/i);
med
var result= string.search(new RegExp(searchstring, "i"));
Hvis du bare søker etter en streng i stedet for et mer komplisert regulært uttrykk, kan du bruke indexOf()
- men husk å bruke små bokstaver på begge strengene først, for indexOf()
skiller mellom store og små bokstaver:
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);
Eller i en enkelt linje:
var result = string.toLowerCase().indexOf(searchstring.toLowerCase())>=0;