String.prototype.match()

match() メソッドは、正規表現に対する文字列 のマッチングの際に、そのマッチの結果を得るために使われます。

構文

str.match(regexp)

引数

regexp
正規表現オブジェクト (RegExp) です。RegExp ではないオブジェクト obj が渡された場合、new RegExp(obj) による RegExp オブジェクトへの暗黙的な変換が行われます。一切引数を与えずに match() メソッドを使った場合、空の文字列 1 つを持つ Array ([""]) を取得します。

返り値

グローバル (g) フラグの有無によって内容が変わる Array を返します。マッチが見つからなかった場合は null を返します。

  • g フラグがある場合、キャプチャグループを除いた、正規表現にマッチしたすべての結果を返します。
  • g フラグがない場合、最初のマッチとそれに対するキャプチャグループのみを返します。この場合、返される要素には下記の「追加されるプロパティ」が存在します。

追加されるプロパティ

上記で説明されたように、追加のプロパティを持つ結果が返されることがあります。

  • groups: 名前付きキャプチャグループの配列です。名前付きキャプチャグループが定義されてない場合は undefined です。詳細はグループと長さを見てください。
  • index: 結果が見つかった検索のインデックスです。
  • input: 検索された文字列のコピーです。

詳細

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

RegExp メソッド

  • 文字列が RegExp という正規表現にマッチするかどうかを知る必要がある場合、RegExp.test() を使います。
  • 一番最初に見つけたマッチだけが欲しい場合、代わりに RegExp.exec() を使ったほうが良いかもしれません。
  • グローバルフラグを持つ正規表現でキャプチャグループを取得する場合、RegExp.exec() を使用してください。

match() を使う

以下の例において、match は「Chapter」、それに続く 1 つ以上の数字、それに続く 0 回以上の小数点と数字、を見つけるために使われています。正規表現が i フラグを含む場合、大文字と小文字の違いは無視されます。

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

console.log(found);

// logs [ 'see Chapter 3.4.5.1',
//        'Chapter 3.4.5.1',
//        '.1',
//        index: 22,
//        input: 'For more information, see Chapter 3.4.5.1' ]

// 'see Chapter 3.4.5.1' is the whole match.
// 'Chapter 3.4.5.1' was captured by '(chapter \d+(\.\d)*)'.
// '.1' was the last value captured by '(\.\d)'.
// The 'index' property (22) is the zero-based index of the whole match.
// The 'input' property is the original string that was parsed.

match() で グローバル (global) フラグ と 大文字と小文字の違いを無視する (ignore case) フラグを使う

以下の例は、グローバル (global) フラグ と 大文字と小文字の違いを無視する (ignore case) フラグの使用のデモです。A から E までと、a から e までの文字のすべてが、それぞれ、配列の要素の 1 つとして返ります。

var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);

console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']

引数なしで match() を使う

var str = "Nothing will come of nothing.";

str.match();   // returns [""]

RegExp ではないオブジェクトを引数にする

引数が文字列か数値の場合、new RegExp(obj) によって RegExp に暗黙的に変換されます。それが正の符号を持った数値だった場合、RegExp() メソッドは正の符号を無視します。

var str1 = "NaN means not a number. Infinity contains -Infinity and +Infinity in JavaScript.",
    str2 = "My grandfather is 65 years old and My grandmother is 63 years old.",
    str3 = "The contract was declared null and void.";
str1.match("number");   // "number" is a string. returns ["number"]
str1.match(NaN);        // the type of NaN is the number. returns ["NaN"]
str1.match(Infinity);   // the type of Infinity is the number. returns ["Infinity"]
str1.match(+Infinity);  // returns ["Infinity"]
str1.match(-Infinity);  // returns ["-Infinity"]
str2.match(65);         // returns ["65"]
str2.match(+65);        // A number with a positive sign. returns ["65"]
str3.match(null);       // returns ["null"]

仕様

仕様書 策定状況 コメント
ECMAScript 3rd Edition (ECMA-262) 標準 初期定義です。JavaScript 1.2 で実装されました。
ECMAScript 5.1 (ECMA-262)
String.prototype.match の定義
標準
ECMAScript 2015 (6th Edition, ECMA-262)
String.prototype.match の定義
標準
ECMAScript Latest Draft (ECMA-262)
String.prototype.match の定義
ドラフト

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
matchChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 4Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 1.0nodejs 完全対応 あり
flags
非推奨非標準
Chrome 未対応 なしEdge 未対応 なしFirefox 未対応 1 — 49IE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 未対応 なしChrome Android 未対応 なしFirefox Android 未対応 4 — 49Opera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なしnodejs 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応
非標準。ブラウザー間の互換性が低い可能性があります。
非標準。ブラウザー間の互換性が低い可能性があります。
非推奨。新しいウェブサイトでは使用しないでください。
非推奨。新しいウェブサイトでは使用しないでください。

Firefox 特有のノート

  • flags was a non-standard second argument only available in Firefox: str.match(regexp, flags). It has been removed starting with Firefox 49.
  • Starting with Firefox 27, this method has been adjusted to conform with the ECMAScript specification. When match() is called with a global regular expression, the RegExp.lastIndex property (if specified) will be reset to 0 (バグ 501739).

関連項目