2018月06日17日
JavaScript の文字列検索と使い分け
JavaScript で文字列を検索する場合、いくつかの方法が用意されている。
- indexOf
- match
- test
- search
とりあえず違いを表にしてみた。他にも exec とかあった気がするけど、とりあえず。
単純な文字列 | 正規表現 | 戻り値 | クラス | |
---|---|---|---|---|
indexOf | ○ | × | Integer (マッチしたインデックス) | String |
match | △ | ○ | Integer (マッチしたインデックス) | String |
test | △ | ○ | Bool | RegExp |
search | △ | ○ | Integer (マッチしたインデックス) | String |
使い分けとベンチマーク
まずはそれぞれの検索スピードのベンチマークを資料として。
JavaScriptで文字列の有無判定方法の速度ベンチマーク(indexOf、match、test)
ちなみに上記の表で「単純検索」で△が多いのは、正規表現を使って単純検索するとかならできるから・・・みたいな感じです。
次にそれぞれの使い分け方をざっくり書いておく。
indexOf
単純に検索したい文字列が対象の文字列に含まれるか、だけを検索したい場合は indexOf でほとんどの場合はいい。また、速度も安定している。ただし正規表現を用いることはできないので、厳密な文字列のチェックには向かない。
match / search
似ているのでまとめてしまったけど、match と search は正規表現も使えるし、出現する位置が取れたりとできることがいっぱいある。ただし遅いので、単純に正規表現で一致するかどうかを調べたいだけなら次に書く test がいい。
test
これだけ今回出てきた検索の中で String のメソッドじゃなくて RegExp のメソッド。なので他と違って書き方が以下みたいになる。
/^ABC$/.test(Sring);
indexOf と違って正規表現が使える上に早い。ただし戻り値が Bool なので一致する or 一致しない、しかわからない。出現位置が知りたければ indexOf を使うこともできるけど、indexOf は前述した通り正規表現が使えないので厳密なチェックはできない。