JavaScriptで2つの文字列を使った大文字小文字を区別しない検索を動作させようとしています。
通常は以下のようになります。
var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);
i` フラグは大文字小文字を区別しないためのものです。
しかし、私は2番目の文字列を検索する必要があります。フラグがない場合は完璧に動作します。
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);
上記の例に /i
フラグを追加すると、検索文字列を検索し、変数 "searchstring" にあるものは検索しません(次の例は動作しません)。
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);
どのようにすれば実現できますか?
そう、.search
ではなく、.match
を使ってください。.match`の呼び出し結果は、マッチした実際の文字列そのものを返しますが、それをブール値として使用することもできます。
var string = "Stackoverflow is the BEST";
var result = string.match(/best/i);
// result == 'BEST';
if (result){
alert('Matched');
}
このように正規表現を使用することは、おそらくJavaScriptでそれを行うための最もすっきりとしたわかりやすい方法ですが、これは*正規表現であり、したがって正規表現のメタキャラクタを含むことができることに留意してください。文字列を他の場所(例えば、ユーザーの入力)から取得したい場合や、多くのメタキャラクタをエスケープする必要がないようにしたい場合は、以下のように indexOf
を使用するのが最適でしょう。
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');
}
交換
var result= string.search(/searchstring/i);
を
var result= string.search(new RegExp(searchstring, "i"));
複雑な正規表現ではなく、単に文字列を検索する場合は、indexOf()
を使うことができます。ただし、indexOf()
は大文字と小文字を区別するので、最初に両方の文字列を小文字にすることを忘れないでください。
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);
または1行で。
var result = string.toLowerCase().indexOf(searchstring.toLowerCase())>=0;