RegExp.$1-$9

旧来の $1, $2, $3, $4, $5, $6, $7, $8, $9 プロパティは、正規表現の静的かつ読み取り専用プロパティで、括弧で括られた部分文字列に一致したものを含みます。

解説

$1, ..., $9 プロパティは静的です。個々の正規表現オブジェクトのプロパティではありません。そのため、常に RegExp.$1, ..., RegExp.$9として使用してください。

これらのプロパティの値は読み取り専用で、一致に成功するたびに変更されます。

括弧で括られた部分文字列の数に制限はありませんが、 RegExp オブジェクトは最初の 9 つの部分文字列しか保持できません。返された配列の添字を使用すると、すべての括弧付き部分文字列にアクセスすることができます。

これらのプロパティは、 String.replace メソッドの置換テキストで使用することができます。この方法で使用する場合は、これらのプロパティの前に RegExp を付けないでください。以下の例は、これを示しています。正規表現に括弧が含まれていない場合、スクリプトは $n を文字通り解釈します (ここで n は正の整数です)。

$n を String.replace で使用

次のスクリプトは、 String インスタンスの replace() メソッドを使用して、名前を first last の形式で一致させ、 last, first の形式で出力します。置換テキストでは、スクリプトは $1$2 を使用して、正規表現パターンで対応する一致する括弧の結果を示しています。

var re = /(\w+)\s(\w+)/;
var str = 'John Smith';
str.replace(re, '$2, $1'); // "Smith, John"
RegExp.$1; // "John"
RegExp.$2; // "Smith"

次のスクリプトは、 RegExp インスタンスの test() メソッドを使用して、一般的な文字列で数値を取得しています。

var str = 'Test 24';
var number = /(\d+)/.test(str) ? RegExp.$1 : '0';
number; // "24"

re.test(str) 呼び出しと RegExp.$n プロパティの間で他の正規表現を使用する操作は、副作用がある可能性があることに注意してください。そのため、これらの特殊なプロパティへのアクセスは即座に行うべきで、そうしないと予期せぬ結果になる可能性があります。

仕様書

Specification
Legacy RegExp features
# additional-properties-of-the-regexp-constructor

ブラウザーの互換性

BCD tables only load in the browser

関連情報