web-dev-qa-db-ja.com

JavaScriptで別の部分文字列を含む文字列をチェックする最も速い方法は?

JavaScriptのパフォーマンスの問題に取り組んでいます。だから私はちょうど聞きたいです:文字列に別のサブストリングが含まれているかどうかを確認する最も速い方法は何ですか(ブール値が必要です)?あなたのアイデアとサンプルスニペットコードを提案していただけますか?

144

これはあなたのために働きますか?

string1.indexOf(string2) >= 0

編集:string2に繰り返しパターンが含まれている場合、これはRegExpよりも高速ではない場合があります。一部のブラウザでは、indexOfはRegExpよりもはるかに遅い場合があります。コメントを参照してください。

編集2:文字列が非常に長い場合や繰り返しパターンを含む場合、RegExpはindexOfよりも高速になる場合があります。コメントと@Felixの回答をご覧ください。

17
Stephen Chung

単純なforループを使用して、文字列内のすべての要素を反復処理し、charAtを使用して比較すると、indexOfまたはRegexよりも高速に実行されることがわかりました。コードと証明は JSPerf で入手できます。

ETA:indexOfおよびcharAtは、jsperf.comにリストされているブラウザースコープデータに従って、Chrome Mobileで同様にひどいパフォーマンスを発揮します

8
wpg4665

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に示されているように、両方ともうまく機能しているようです。

7
zangw

最速

  1. (ES6)includes
 var string = "hello"、
 substring = "lo"; 
 string.includes(substring); 
  1. ES5以前indexOf
 var string = "hello"、
 substring = "lo"; 
 string.indexOf(substring)!== -1; 

http://jsben.ch/9cwLJ

enter image description here

5
TinhNQ

単純な文字列を見つけるために、indexOf()メソッドと正規表現を使用することはほとんど同じです: http://jsperf.com/substring -so書きやすいと思われるものを選択してください。

3
Chii

Jsben.chを作成しました http://jsben.ch/#/aWxtF ... indexOfの方が少し速いようです。

2
EscapeNetscape

文字列に.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)));

良い一日を!

1