RegExp.prototype.test()

test() メソッドは、正規表現と指定された文字列の一致を調べるための検索を実行します。 true または false を返します。

試してみましょう

構文

regexObj.test(str)

引数

str

正規表現にマッチさせる文字列。

返値

正規表現と指定した文字列 str の間に一致するものがあった場合は、true。そうでない場合は、false

解説

あるパターンがある文字列内で見つかるかどうか調べたいときは、 test() を使用してください。 test() は論理値を返します。これは (一致した場所のインデックス番号、または見つからない場合は -1 を返す) String.prototype.search() メソッドとは異なります。

より多くの情報を得るためには (実行が遅くなりますが)、 exec() メソッドを使用してください (String.prototype.match() メソッドと同様)。

exec() と同様に (またはその組み合わせで)、 test() は同じグローバル正規表現インスタンスで複数回呼び出されると、前回の一致の先に進むことになります。

test() の使用

"hello" が文字列の先頭近くに含まれているかを真偽値で確認する簡単な例です。

js
const str = "hello world!";
const result = /^hello/.test(str);

console.log(result); // true

次の例では、テストの成否によってメッセージを表示します。

js
function testInput(re, str) {
  let midstring;
  if (re.test(str)) {
    midstring = "contains";
  } else {
    midstring = "does not contain";
  }
  console.log(`${str} ${midstring} ${re.source}`);
}

グローバルフラグを持つ正規表現の test() の使用

正規表現にグローバルフラグが設定されている場合、 test() は正規表現が所有する lastIndex の値を加算します。 (exec() も同様に lastIndex プロパティの値を加算します。)

その後にさらに test(str) を呼び出すと、 strlastIndex から検索します。 lastIndex プロパティは test()true を返すたびに増え続けます。

メモ: test()true を返す限り、 lastIndex は別な文字列をテストした場合であっても、リセットされません

test()false を返した場合、正規表現の lastIndex プロパティを呼び出すと 0 にリセットされます。

次の例はその挙動を示しています。

js
const regex = /foo/g; // "global" フラグを設定

// regex.lastIndex は 0 です。
regex.test("foo"); // true

// regex.lastIndex は 3 です。
regex.test("foo"); // false

// regex.lastIndex は 0 です。
regex.test("barfoo"); // true

// regex.lastIndex は 6 です。
regex.test("foobar"); //false

// regex.lastIndex は 0 です。
// (...以下略)

仕様書

Specification
ECMAScript Language Specification
# sec-regexp.prototype.test

ブラウザーの互換性

BCD tables only load in the browser

関連情報