文字列が正規表現とマッチするかテストする

RegExp オブジェクトのインスタンスメソッドである test は、対象の文字列が正規表現とマッチするかテストを行い true または false を返します。ここでは RegExp オブジェクトの test メソッドの使い方について解説します。

(Last modified: )

testメソッドの使い方

RegExp オブジェクトの test メソッドは、対象となる文字列が正規表現とマッチするかどうかをテストし結果として論理値を返します。書式は次の通りです。

正規表現オブジェクト.test(文字列)

引数に指定した文字列が少なくとも一つ正規表現とマッチした場合は true を返します。マッチしなかった場合は false を返します。

次のサンプルをみてください。

let regexp = /ball/;
let str1 = 'Go to see a baseball game';
let str2 = 'Make a cake tomorrow';

console.log(regexp.test(str1));
>> true

console.log(regexp.test(str2));
>> false

正規表現は 'ball' とマッチするパターンです。一つ目の文字列には 'ball' が含まれているので正規表現とマッチします。よって test メソッドは true を返します。

Go to see a baseball game

二つ目の文字列には 'ball' が含まれていないので正規表現とマッチしません。よって test メソッドは false を返します。

もう一つサンプルをみてください。

let regexp = /a.e/;
let str1 = 'Go to see a baseball game';
let str2 = 'Make a cake tomorrow';

console.log(regexp.test(str1));
>> true

console.log(regexp.test(str2));
>> true

パターンの中でドット(.)が記述された場合は特別な意味を持ち、任意の一文字とマッチします。その為、今回の正規表現は 'a' で始まり任意の一文字が続き、最後に 'e' で終わる文字列とマッチするパターンです。一つ目の文字列および二つ目の文字列はそれぞれ次の個所で正規表現とマッチするため、 test メソッドはどちらも true を返します。

Go to see a baseball game
Make a cake tomorrow

グローバルフラグが設定されている場合

パターンの最後に g を記述するとグローバルフラグを設定することができます。

/パターン/g

正規表現にグローバルフラグが設定されている場合、 test メソッドを実行し文字列が正規表現にマッチすると、正規表現オブジェクトの lastIndex プロパティの値がマッチした文字列の次の文字のインデックスに設定されます。(グローバルフラグが設定されていない場合は、 test メソッドでマッチしたとしても lastIndex は 0 のままです)。

let regexp = /ball/g;
let str = 'baseball and football';

console.log(regexp.test(str));
>> true
console.log(regexp.lastIndex);
>> 8

グローバルフラグが設定されている場合(1)

そのあとで同じ正規表現に対して同じ文字列を引数に指定して test メソッドを実行すると、現在の lastIndex が示す文字列の位置から文字列が正規表現にマッチするのかをテストします。再びマッチした場合は、改めて lastIndex プロパティの値が更新されます。

let regexp = /ball/g;
let str = 'baseball and football';

console.log(regexp.test(str));
>> true
console.log(regexp.lastIndex);
>> 8

console.log(regexp.test(str));
>> true
console.log(regexp.lastIndex);
>> 21

グローバルフラグが設定されている場合(2)

test メソッドを実行したときに正規表現にマッチしなかった場合には lastIndex は 0 に戻ります。

let regexp = /ball/g;
let str = 'baseball and football';

while (regexp.test(str)){
  console.log("lastIndex = " + regexp.lastIndex);
}
console.log("lastIndex = " + regexp.lastIndex);

>> lastIndex = 8
>> lastIndex = 21
>> lastIndex = 0

このようにグローバルフラグを設定することで、同じ文字列に対して正規表現が複数回マッチするかどうかテストすることができます。

-- --

RegExp オブジェクトの test メソッドの使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。