JavaScript 文字列を含むかどうかの判定【contains/includes/部分一致の検索】

文字列の部分一致を判定する方法を紹介します。今回紹介するメソッドはJavaScriptのバージョンによっては利用できない場合があるため、代替処理も合わせて紹介します。

includesメソッドによる部分一致の判定

includesメソッドは指定された文字列が含まれているかどうかを判定するものです。対象の文字列が含まれていた場合にtrueの戻り値を返します。

"abc".includes("b") // true  (含む)
"abc".includes("B") // false (含まない)

// 第二引数で検索開始位置の指定も可能
"abc".includes("a", 1) // false

JavaScriptではcontainsメソッドの代わりにこのincludesが使われています。

includesメソッドはECMAScript 2015(ECMAScript 6)で追加されたメソッドであり、古いブラウザでは利用できない場合がありますので、利用には注意が必要です。

部分一致の実現方法

includesメソッドが使えない環境では自前でincludesやcontainsの挙動を実現する必要があります。indexOfメソッドを用いてこれを実現します。

"abc".indexOf("b") !== -1 // true
"abc".indexOf("B") !== -1 // false

indexOfメソッドは文字列の出現位置を返すメソッドですが、一致する文字列が見つからなかった場合には-1が返されます。そのため、この-1かどうかを判定することで、includesやcontainsメソッドの挙動を実現することができるのです。

includesメソッドの自作

ECMAScript 2015のincludesメソッドと同等の関数を、Stringオブジェクトに直接追加することも可能です。

if (!String.prototype.includes) {
  String.prototype.includes = function(search, start) {
    'use strict';
    if (typeof start !== 'number') {
      start = 0;
    }
    
    if (start + search.length > this.length) {
      return false;
    } else {
      return this.indexOf(search, start) !== -1;
    }
  };
}

一行目でincludesメソッドの存在確認が行われているため、ECMAScript 2015に対応した最新の処理系では余計な追加処理が行われませんし、逆にincludesに対応していない古いJS環境ではincludesメソッドの定義が行われるようになります。いずれの環境でも同等の記法("abc".includes("b"))で部分一致の検索が可能になります。

広告