【JavaScript ECMAScript】RegExp::RegExp.$1, …, RegExp.$9静的アクセサプロパティの使い方
RegExp.$1, …, RegExp.$9静的アクセサプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
RegExp.$1, …, RegExp.$9プロパティは、JavaScriptにおいて、正規表現のマッチング操作によって捕捉された部分文字列を保持するプロパティです。これらは、直前に行われた正規表現検索で、対応するキャプチャグループ(正規表現の丸括弧で囲まれた部分)に一致したテキストを格納します。具体的には、$1は最初のキャプチャグループ、$2は2番目のキャプチャグループ、といった具合に、最大$9まで利用可能です。これらのプロパティの値は、RegExp.prototype.exec() や String.prototype.match() メソッドなどがマッチングに成功した直後に自動的に更新されます。
しかしながら、RegExp.$1からRegExp.$9までのプロパティは現在非推奨(deprecated)とされています。これは、これらのプロパティがグローバルな状態に依存し、複数の正規表現操作が連続して行われる場合に意図しない結果を引き起こす可能性があるためです。そのため、新しいJavaScriptコードを記述する際には、これらの非推奨プロパティの使用は避けるべきです。
代替として、RegExp.prototype.exec() メソッドや String.prototype.match() メソッドが返す「マッチ結果オブジェクト」を使用することが強く推奨されます。このオブジェクトは、マッチした文字列全体に加え、各キャプチャグループに一致した文字列をインデックス付きプロパティ(例えば、matchResult[1], matchResult[2] など)として保持します。この方法は、より明確で安全にキャプチャグループの結果を扱うことができ、コードの可読性と保守性を高める上で重要です。
構文(syntax)
1const text = "Hello World! The year is 2023."; 2const regex = /(\w+)\s(\w+)! The year is (\d+)./; 3 4// RegExp.prototype.exec() メソッドを実行することで、$1, $2, $3... が設定されます。 5regex.exec(text); 6 7// キャプチャされた各部分にアクセス 8console.log(RegExp.$1); // 最初のキャプチャグループ: "Hello" 9console.log(RegExp.$2); // 2番目のキャプチャグループ: "World" 10console.log(RegExp.$3); // 3番目のキャプチャグループ: "2023"
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
RegExp.$1 から RegExp.$9 は、正規表現の検索操作でキャプチャされた、それぞれ1番目から9番目のキャプチャグループにマッチした文字列を返します。