1. ホーム
  2. ジャバスクリプト

[解決済み]JavaScriptで文字列が別の部分文字列を含むことを確認する最速の方法は?

2022-04-21 03:46:12

質問

私は、JavaScriptのパフォーマンスの問題に取り組んでいます。文字列が別の部分文字列を含むかどうかをチェックする最速の方法は何ですか(私はブール値が必要なだけです)?あなたのアイデアとサンプルスニペットコードを提案することができますか?

解決方法は?

3つの可能性があります。

  1. 正規表現 :

     (new RegExp('word')).test(str)
     // or
     /word/.test(str)
    
    
  2. indexOf :

     str.indexOf('word') !== -1
    
    
  3. includes :

     str.includes('word')
    
    

正規表現の方が速いようです (少なくともChrome 10では)。

パフォーマンステスト - ショートヘイスタック

パフォーマンステスト - 長い干し草の山


**2011年更新

どの方式が速いかは断言できません。ブラウザ間の差は非常に大きいです。Chrome 10では indexOf の方が速いようですが、Safari 5の場合。 indexOf は、他のどの方法よりも明らかに遅いです。

自分で見て、試してみるしかない。それはあなたのニーズ次第です。例えば 大文字小文字を区別しない の検索は、正規表現を使用した方がはるかに高速です。


2018年の更新情報です。

自分でテストを実行する手間を省くために、一般的なブラウザでの現在の結果を示します。パーセント表示は、次に速い結果(ブラウザによって異なる)に対するパフォーマンスの増加を示しています。

クローム indexOf (~98% 速い) <-- wow

Firefoxです。 キャッシュされた RegExp (~18% 速い)

IE11です。 キャッシュされた RegExp (~10% 速い)

エッジ indexOf (~18% 高速化)

サファリ キャッシュされた RegExp (~0.4% 高速化)

なお キャッシュされた RegExp var r = new RegExp('simple'); var c = r.test(str); とは対照的です。 /simple/.test(str)