RegExp.prototype.test()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
test()
は RegExp
インスタンスのメソッドで、正規表現と指定された文字列を照合するための検索を実行します。一致があった場合は true
を、それ以外の場合は false
を返します。
JavaScript の RegExp
オブジェクトは global
または sticky
フラグ(/foo/g
や /foo/y
など)を設定するとステートフルになります。これらは前回一致したときの lastIndex
を格納します。これを内部的に使用することで、 test()
を使用して文字列の複数の照合を反復処理することができます(キャプチャグループを使用)。
試してみましょう
構文
test(str)
引数
str
-
正規表現と照合する文字列。すべての値は文字列に変換されますので、これを省略したり
undefined
を渡したりするとtest()
は文字列"undefined"
を検索するようになります。
返値
正規表現と指定した文字列 str
の間に一致するものがあった場合は、true
。そうでない場合は、false
。
解説
あるパターンがある文字列内で見つかるかどうか調べたいときは、 test()
を使用してください。 test()
は論理値を返します。これは (一致した場所のインデックス番号、または見つからない場合は -1
を返す) String.prototype.search()
メソッドとは異なります。
より多くの情報を得るためには (実行が遅くなりますが)、 exec()
メソッドを使用してください (String.prototype.match()
メソッドと同様)。
exec()
と同様に (またはその組み合わせで)、 test()
は同じグローバル正規表現インスタンスで複数回呼び出されると、前回の一致の先に進むことになります。
例
test() の使用
"hello"
が文字列の先頭近くに含まれているかを論理値で確認する簡単な例です。
const str = "hello world!";
const result = /^hello/.test(str);
console.log(result); // true
次の例では、テストの成否によってメッセージを表示します。
function testInput(re, str) {
const midString = re.test(str) ? "contains" : "does not contain";
console.log(`${str} ${midString} ${re.source}`);
}
グローバルフラグを持つ正規表現の test() の使用
正規表現にグローバルフラグが設定されている場合、 test()
は正規表現が所有する lastIndex
の値を加算します。(RegExp.prototype.exec()
も同様に lastIndex
プロパティの値を加算します。)
その後にさらに test(str)
を呼び出すと、 str
を lastIndex
から検索します。 lastIndex
プロパティは test()
が true
を返すたびに増え続けます。
メモ: test()
が true
を返す限り、 lastIndex
は別な文字列をテストした場合であっても、リセットされません。
test()
が false
を返した場合、正規表現の lastIndex
プロパティを呼び出すと 0
にリセットされます。
次の例はその挙動を示しています。
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 です。
regex.test("foobarfoo"); // true
// regex.lastIndex は 3 です。
regex.test("foobarfoo"); // true
// regex.lastIndex は 9 です。
regex.test("foobarfoo"); // false
// regex.lastIndex は 0 です。
// (...以下略)
仕様書
Specification |
---|
ECMAScript Language Specification # sec-regexp.prototype.test |
ブラウザーの互換性
BCD tables only load in the browser