読者です 読者をやめる 読者になる 読者になる

【JavaScript実験】 文字列内検索

JavaScript

Javascriptで探したい文字列があるときに(ある文字列が対象中にあるか判別したいとき)、 使いたいメソッドをふたつ知る。

indexOfと正規表現 - ないせい

自分ならどうするだろう、と考えてみたところ、 test を使うのが一番読みやすくて好きかなあと思った。もしくは match かなあ。

「テストしてみたらこの文字列あったよ」とか「文字列の中にマッチするところあるよ」みたいなニュアンスが伝わりやすいから。

もっと言えば test だと真偽値返してくれるからコード書いた人の意図も伝わりやすいかなあと思ったりする。

たとえば hogefugafoobar という文字列に hage が含まれてるかチェックする場合、以下のパターンになる。

// indexOfを使う場合
if("hogefugafoobar".indexOf("hage") >= 0) {
  /* 処理 */
}

// matchを使う場合
if("hogefugafoobar".match(/hage/)) {
  /* 処理 */
}

// testを使う場合
if(/hage/.test("hogefugafoobar")) {
  /* 処理 */
}

ある程度好みの問題とは思うけれど。

テストページも作ってみた。

https://cosmology233.github.io/sandbox/hatena/2016/08/21/

文字列 Lorem ipsum dolor sit amet 内を検索することができる。結果はコンソールに出力される。

f:id:kosumoro:20160821185721j:plain

対象文字列内に検索文字列が存在する場合

メソッド 返り値 速さ
indexOf 数値 1位
match 配列 3位
test true 2位

対象文字列内に検索文字列が存在しない場合

メソッド 返り値 速さ
indexOf 数値 1位
match null 2位
test false 3位

実行するたびに速度は変わるけど平均してこんな感じ。

速さについては、ちょっとした検索ならどれもミリ秒以下だから気にする必要はないのかも。

それぞれのメソッドの特徴を把握した上で、要件に応じて選べばいいのかな、と思った。