JavaScript'te iki dizeyle büyük/küçük harfe duyarlı olmayan bir arama yapmaya çalışıyorum.
Normalde şöyle olurdu:
var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);
i` bayrağı büyük/küçük harf duyarsızlığı içindir.
Ancak ikinci bir dizeyi aramam gerekiyor; bayrak olmadan mükemmel çalışıyor:
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);
Yukarıdaki örneğe /i
bayrağını eklersem, "searchstring" değişkeninde ne olduğunu değil, searchstring'i arayacaktır (sonraki örnek çalışmıyor):
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);
Bunu nasıl başarabilirim?
Evet, .search
yerine .match
kullanın. .match` çağrısının sonucu, kendisiyle eşleşen gerçek dizeyi döndürür, ancak yine de bir boolean değeri olarak kullanılabilir.
var string = "Stackoverflow is the BEST";
var result = string.match(/best/i);
// result == 'BEST';
if (result){
alert('Matched');
}
Bunun gibi bir düzenli ifade kullanmak muhtemelen JavaScript'te bunu yapmanın en düzenli ve en açık yoludur, ancak bunun * bir düzenli ifade olduğunu ve bu nedenle regex metakarakterleri içerebileceğini unutmayın. Dizeyi başka bir yerden almak istiyorsanız (örneğin, kullanıcı girişi) veya çok sayıda metakarakterden kaçmak zorunda kalmaktan kaçınmak istiyorsanız, muhtemelen en iyisi bunun gibi indexOf
kullanmanızdır:
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');
}
Değiştirin
var result= string.search(/searchstring/i);
ile
var result= string.search(new RegExp(searchstring, "i"));
Daha karmaşık bir düzenli ifade yerine sadece bir dize arıyorsanız, indexOf()
kullanabilirsiniz - ancak indexOf()
büyük/küçük harfe duyarlı olduğu için önce her iki dizeyi de küçük harfle yazmayı unutmayın:
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);
Ya da tek bir satırda:
var result = string.toLowerCase().indexOf(searchstring.toLowerCase())>=0;