JScript での逆参照

前方参照は、繰り返し出現する文字グループの検索に使用されます。 これらは、入力文字列の要素の順序と位置を並べ替えることで、入力文字列の書式を再設定するためにも使用されます。

部分式は、正規表現から、また置換文字列から参照できます。 各部分式は番号で識別され、前方参照と呼ばれます。

正規表現内のかっこは、部分式の作成に使用されます。 結果のサブマッチは、プログラムで取得できます。 詳細については、「代替と部分式」を参照してください。

前方参照の使用

部分式は、正規表現から参照できます。

正規表現では、保存される各サブマッチは、左から右の順に保存されます。 サブマッチが保存されるバッファー番号は 1 から始まり、最大 99 までです。 正規表現では、各バッファーにアクセスするには、\n を使用します。ここで、n はバッファーを指定する 1 桁または 2 桁の数字です。

前方参照の 1 つの用途は、文字列内でまとまって出現する 2 つの同じ単語の一致候補を特定することです。 次に例を示します。Is is the cost of of gasoline going up up?

この文には、いくつかの重複する単語が含まれます。 単語の重複を 1 つずつ調べる必要なしに、このような文を修正できると便利です。 次の JScript 正規表現では、これを実現するために 1 つの部分式を使用しています。

/\b([a-z]+) \1\b/gi

このケースの部分式は、かっこで囲まれている部分すべてです。 その部分式には、[a-z]+ で指定されているように、1 つ以上の英字が含まれています。 正規表現の 2 番目の部分は、その前に保存されたサブマッチへの参照です。つまり、かっこ内の正規表現と一致した 2 つ目の一致候補です。 \1 は、最初のサブマッチを指定するために使用されます。

ワード境界を表す \b メタ文字によって、個別の単語だけが検出されます。 メタ文字を指定しないと、正規表現によって "is issued" や "this is" なども間違って検出されてしまいます。

重複する単語を一覧表示する例を次に示します。 これは、一致とサブマッチをコードでどのように取得できるかを示しています。

var result;

var re = /\b([a-z]+) \1\b/gi
var src = "Is is the cost of of gasoline going up up?"

// Get the first match.
result = re.exec(src);

while (result != null)
{
    // Show the entire match.
    print();
    print(result[0]);

    // Show the submatches.
    for (var index = 1; index < result.length; index++)
    {
        print("submatch " + index + ": " + result[index]);
    }

    // Get the next match.
    result = re.exec(src);
}

// Output:
//  Is is
//  submatch 1: Is

//  of of
//  submatch 1: of

//  up up
//  submatch 1: up

部分式は、置換文字列から参照することもできます。

上に示した正規表現を使用すると、次の例では、2 つの連続したまったく同じ単語が、同じ単語 1 つと置換されます。 replace メソッドでは、$1 は 1 番目に保存されたサブマッチを参照します。 サブマッチが複数ある場合は、続けて $2、$3 などとして参照します。

var re = /\b([a-z]+) \1\b/gi
var src = "Is is the cost of of gasoline going up up?"
var result = src.replace(re, "$1");
print(result);
// Output:
//  Is the cost of gasoline going up?

文字列の中の単語の各ペアを入れ替える例を次に示します。

var re = /(\S+)(\s+)(\S+)/gi
var src = "The quick brown fox jumps over the lazy dog."
var result = src.replace(re, "$3$2$1");
print(result);
// Output:
//  quick The fox brown over jumps lazy the dog.

参照

参照

replace メソッド

概念

代替と部分式

その他の技術情報

正規表現の概説