JavaScriptのパフォーマンスの問題に取り組んでいます。だから私はちょうど聞きたいです:文字列に別のサブストリングが含まれているかどうかを確認する最も速い方法は何ですか(ブール値が必要です)?あなたのアイデアとサンプルスニペットコードを提案していただけますか?
これはあなたのために働きますか?
string1.indexOf(string2) >= 0
編集:string2に繰り返しパターンが含まれている場合、これはRegExpよりも高速ではない場合があります。一部のブラウザでは、indexOfはRegExpよりもはるかに遅い場合があります。コメントを参照してください。
編集2:文字列が非常に長い場合や繰り返しパターンを含む場合、RegExpはindexOfよりも高速になる場合があります。コメントと@Felixの回答をご覧ください。
単純なforループを使用して、文字列内のすべての要素を反復処理し、charAt
を使用して比較すると、indexOf
またはRegex
よりも高速に実行されることがわかりました。コードと証明は JSPerf で入手できます。
ETA:indexOf
およびcharAt
は、jsperf.comにリストされているブラウザースコープデータに従って、Chrome Mobileで同様にひどいパフォーマンスを発揮します
ES6では、 includes()
メソッドを使用して、ある文字列が別の文字列内で見つかるかどうかを判断し、必要に応じてtrue
またはfalse
を返します。
var str = 'To be, or not to be, that is the question.';
console.log(str.includes('To be')); // true
console.log(str.includes('question')); // true
console.log(str.includes('nonexistent')); // false
jsperf between
var ret = str.includes('one');
そして
var ret = (str.indexOf('one') !== -1);
結果がjsperfに示されているように、両方ともうまく機能しているようです。
最速
var string = "hello"、 substring = "lo"; string.includes(substring);
var string = "hello"、 substring = "lo"; string.indexOf(substring)!== -1;
単純な文字列を見つけるために、indexOf()メソッドと正規表現を使用することはほとんど同じです: http://jsperf.com/substring -so書きやすいと思われるものを選択してください。
Jsben.chを作成しました http://jsben.ch/#/aWxtF ... indexOfの方が少し速いようです。
文字列に.match()
メソッドを使用するのは簡単な方法です。
var re = /(AND|OR|MAYBE)/;
var str = "IT'S MAYBE BETTER WAY TO USE .MATCH() METHOD TO STRING";
console.log('Do we found something?', Boolean(str.match(re)));
良い一日を!