JavaScript

String.prototype.match()メソッド

 編集:2022.08.16 by T.A.

その String に対して regexp で一致する部分を配列で返します

構文
array=String.match(regexp)
String String。
regexp 正規表現オブジェクトです。

regexp が RegExp ではないオブジェクトであった場合、RegExp への暗黙的な変換が new RegExp(regexp) を使用して行われます。

一切引数を与えずに match() メソッドを使った場合、空の文字列 1 つを持つ Arrayの [""] が得られます。

戻り値

グローバル「g」フラグの有無によって内容が変わる Array を返します。一致するものが見つからなかった場合は null を返します。

g フラグがあった場合は、正規表現全体に一致したすべての結果を返しますが、キャプチャー グループは返しません。

g フラグがなかった場合、最初に完全に一致したものと、それに関するキャプチャー グループを返します。この場合、返される要素には下記の追加のプロパティが存在します。

追加のプロパティ

上記の説明にある通り、結果は追加のプロパティを含むことがあります。

groups
名前付きキャプチャー グループのオブジェクトで、キーは名前、値はキャプチャー グループ、または名前付きキャプチャー グループが定義されていない場合は undefined です。詳細はグループと範囲を見てください。
index
結果が見つかった検索のインデックスです。
input
検索された文字列のコピーです。
解説

正規表現が g フラグを含んでいない場合、str.match() は RegExp.exec() と同じ結果を返します。

その他のメソッド

ある文字列が正規表現 RegExp に一致するかどうかを知る必要がある場合は、RegExp.test() を使用してください。

一番最初に一致したものだけが欲しい場合、代わりに RegExp.exec() を使ったほうが良いかもしれません。

キャプチャー グループを取得する場合でグローバル フラグが設定されていた場合は、RegExp.exec() を使用してください。

以下の例において、match() は 'Chapter' とそれに続く 1 桁以上の数字、それに続く 0 回以上の小数点と数字を見つけるために使われています。

正規表現が i フラグを含んでいるので、大文字と小文字の違いは無視されます。

let str='For more information, see Chapter 3.4.5.1';
let re=/see (chapter \d+(\.\d)*)/i;
let found=str.match(re);

D=found;
//0:"see Chapter 3.4.5.1"
//1:"Chapter 3.4.5.1"
//2:".1"
//index:22
//input:"For more information, see Chapter 3.4.5.1"
//groups:undefined
match() での g と i フラグの使用

以下の例は、g と i フラグを match() で使用した実例です。A から E までと、a から e までのすべての文字が返され、それぞれが配列の個々の要素に入ります。

let str='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
let regexp=/[A-E]/gi;
let D=str.match(regexp); //=['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']

メモ: String.prototype.matchAll() とフラグを用いた高度な検索も参照してください。

名前付きキャプチャグループの使用

名前付きキャプチャグループに対応しているブラウザーでは、次のコードは "fox" または "cat" を "animal" という名前のグループに入れます。

let para='The quick brown fox jumps over the lazy dog. It barked.';
let re=/(?fox|cat) jumps over/;
found = para.match(re);
D=found.groups; //={animal: "fox"}
引数なしの match() の使用
let str="Nothing will come of nothing.";
D=str.match(); //=[""]
RegExp ではないオブジェクトを引数にする

引数 regexp が文字列または数値である場合、暗黙に new RegExp(regexp) を使用して RegExp に変換されます。

正の符号がついた正の数であった場合、RegExp() は正の符号を無視します。

let str1="NaN means not a number. Infinity contains -Infinity and +Infinity in JavaScript.";
D=str1.match("number");   //=["number"]
D=str1.match(NaN);        //=["NaN"]。NaN の型は数値です。
D=str1.match(Infinity);   //=["Infinity"]。Infinity の型は数です。
D=str1.match(+Infinity);  //=["Infinity"]
D=str1.match(-Infinity);  //=["-Infinity"]

let str2="My grandfather is 65 years old and My grandmother is 63 years old.";
D=str2.match(65);  //=["65"]
D=str2.match(+65); //=["65"]。(正符号付きの数値による指定)

let str3="The contract was declared null and void.";
D=str3.match(null); //=["null"]

テスト