このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
String.prototype.match()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
In this article
試してみましょう
const paragraph = "The quick brown fox jumps over the lazy dog. It barked.";const regex = /[A-Z]/g;const found = paragraph.match(regex);console.log(found);// 予想される結果: Array ["T", "I"]構文
match(regexp)引数
regexp正規表現オブジェクト、または
Symbol.matchを持つ任意のオブジェクトです。regexpがRegExp以外のオブジェクトであった場合、暗黙的にRegExpへの変換がnew RegExp(regexp)を使用して行われます。一切引数を与えずに
match()メソッドを使った場合、空文字列 1 つを持つArray、[""]が得られます。これはmatch(/(?:)/)と同じになるからです。
返値
Array を返します。これはグローバル (g) フラグの有無によって内容が変わります。一致するものが見つからなかった場合はnull を返します。
gフラグがあった場合は、正規表現全体に一致したすべての結果を返しますが、キャプチャグループは返しません。gフラグがなかった場合、最初に完全に一致したものと、それに関するキャプチャグループを返します。この場合、match()はRegExp.prototype.exec()と同じ結果になります(追加のプロパティ付きの配列)。
解説
String.prototype.match の実装は、引数に対応するSymbol.match メソッドを、最初の引数として文字列を指定して呼び出すだけというもので、それ以外にも特に何も行いません。実際の実装はRegExp.prototype[Symbol.match]() から来ています。
- ある文字列が正規表現
RegExpに一致するかどうかを知る必要がある場合は、RegExp.prototype.test()を使用してください。 - 一番最初に一致したものだけが欲しい場合は、代わりに
RegExp.prototype.exec()を使ったほうが良いかもしれません。 - キャプチャグループを取得する場合でグローバルフラグを設定する場合は、
RegExp.prototype.exec()を使用してください。
正規表現が渡されたときのmatch() の意味についての詳しい情報は、RegExp.prototype[Symbol.match]() を参照してください。
例
>match() の使用
以下の例において、match() は"Chapter" とそれに続く 1 桁以上の数字、それに続く 0 回以上の小数点と数字を見つけるために使われています。
正規表現がi フラグを含んでいるので、大文字と小文字の違いは無視されます。
const str = "For more information, see Chapter 3.4.5.1";const re = /see (chapter \d+(\.\d)*)/i;const found = str.match(re);console.log(found);// [// 'see Chapter 3.4.5.1',// 'Chapter 3.4.5.1',// '.1',// index: 22,// input: 'For more information, see Chapter 3.4.5.1',// groups: undefined// ]上の照合結果では、'see Chapter 3.4.5.1' が一致する文字列全体です。'Chapter 3.4.5.1' は(chapter \d+(\.\d)*) によって捕捉されました。'.1' は(\.\d) によって捕捉された最後の値です。index プロパティ (22) は一致する文字列全体の 0 基点のインデックスです。input プロパティは解釈できた元の文字列です。
match() での global と ignoreCase フラグの使用
以下の例は、 g と i フラグをmatch() で使用した実例です。A からE までと、a からe までのすべての文字が返され、それぞれが配列の個々の要素に入ります。
const str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";const regexp = /[a-e]/gi;const matches = str.match(regexp);console.log(matches);// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']メモ:String.prototype.matchAll() とフラグを用いた高度な検索も参照してください。
名前付きキャプチャグループの使用
名前付きキャプチャグループに対応しているブラウザーでは、次のコードは"fox" または"cat" をanimal という名前のグループに入れます。
const paragraph = "The quick brown fox jumps over the lazy dog. It barked.";const capturingRegex = /(?<animal>fox|cat) jumps over/;const found = paragraph.match(capturingRegex);console.log(found.groups); // {animal: "fox"}引数なしの match() の使用
const str = "Nothing will come of nothing.";str.match(); // returns [""]match() を[Symbol.match]() を実装している RegExp でないオブジェクトで使用
オブジェクトにSymbol.match メソッドがある場合、カスタムマッチャーとして使用することができます。Symbol.match の返値がmatch() の返値になります。
const str = "Hmm, this is interesting.";str.match({ [Symbol.match](str) { return ["Yes, it's interesting."]; },}); // returns ["Yes, it's interesting."]RegExp 以外を引数として取る
正規表現regexp 引数が文字列または数値の場合、RegExp にnew RegExp(regexp) を使用して暗黙的に変換されます。
const str1 = "All numbers except NaN satisfy <= Infinity and >= -Infinity in JavaScript.";const str2 = "My grandfather is 65 years old and My grandmother is 63 years old.";const str3 = "The contract was declared null and void.";str1.match("number"); // "number" は文字列です。 ["number"] を返します。str1.match(NaN); // NaN の型は数値です。 ["NaN"] を返します。str1.match(Infinity); // Infinity の方は数値です。 ["Infinity"] を返します。str1.match(-Infinity); // ["-Infinity"] を返しますstr2.match(65); // ["65"] を返しますstr3.match(null); // ["null"] を返します。特殊文字が適切にエスケープされていないと、予期しない結果になることがあります。
console.log("123".match("1.3")); // [ "123" ]正規表現中の. はどのような文字にも一致するので、これは一致します。 ドット文字にのみ一致するようにするには、入力文字列をエスケープする必要があります。
console.log("123".match("1\\.3")); // null仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-string.prototype.match> |