JavaScriptで「文字列含むか?」はついついindexOfを使ってしまいますが・・
昔っからのJavaプログラマーだからか、ある文字列中にある文字列が含まれているかを調べるためにindexOfという関数を使っていました。
でも、indexOfよりもっとスマートに、より高機能な関数があることを知りました。
文字列を含むか?(部分一致するか?)の具体例
例えば「隠された宝を探せ」という文字列中に「宝」という文字が含まれているか?「宝の山」という文字が含まれているか?という具合です。
indexOfを使う方法
indexOfは、とある文字列中に指定した文字列が含まれていると、指定した文字列が始まる位置のインデックス番号を返してくれます。
指定した文字列が存在しないと-1 が返る仕様を利用して指定した文字列の存在有無を判定することができます。
先ほどの例で「隠された宝を探せ」の中に「宝」が含まれている場合に何らかの処理をさせたい場合は次の様になります。
if ( "隠された宝を探せ".indexOf("宝") > -1) { }
確かに目的は果たすのですが、問題は-1より大きいと何なの?と直感的でなく分かりづらいところです。
String.prototype.indexOf() – JavaScript | MDN
参考にしたページです。indexOf について詳しくはこちらのサイトへ。
testを使う方法
分かりづらさを解消する方法としては test 関数を使う方法があります。
この test はある文字列に対して、指定した正規表現が合致するかをテストする関数です。
先ほどの例をtestを使って書くと次の様になります。
if ( /宝/.test("隠された宝を探せ") ) { }
慣れないと語順が独特で分かりづらいとは思いますが、-1とか数値を解釈するなど不要なので慣れれば便利です。
testは正規表現なので優位
しかも正規表現ですので、複数の文字列が含まれているかや、大文字小文字を区別しないなど、とても柔軟な部分一致が評価できます。
今回はこの記事を見て、testの存在を知りました。
使ってみるととても便利でスマートでしたので、JavaScript で indexOfを常用していた方、test を試してみて下さい。