共用方式為


JScript 的反向參考

「反向參考」(Backreference) 可用來尋找重複的字元群組。 另外也可用來藉由重新排列輸入字串中項目的順序和位置,重新格式化輸入字串。

您可以在規則運算式和取代字串內參考子運算式。 每個子運算式皆以數字識別,且稱為反向參考。

在規則運算式中,子運算式是用括號來建立。 產生的子相符項目可由程式擷取。 如需詳細資訊,請參閱 替代和子運算式

使用反向參考

您可以在規則運算式內參考子運算式。

在規則運算式中,每個儲存的子符合項目會按照從左至右的出現順序儲存。 用於存放子相符項目的緩衝區號碼從 1 開始,最多可到 99 個子運算式。 在規則運算式內,您可以使用 \n 來存取每個緩衝區,其中 n 是一位或兩位十進位數字,用以識別特定緩衝區。

反向參考的其中一項應用就是能夠找出文字中兩個完全一樣且相鄰的單字。 以下面的句子為例:Is is the cost of of gasoline going up up?

這個句子包含數個重複的單字。 如果能設計出一種可以修正句子卻不用尋找每個重複單字的方式會很方便。 下列 JScript 規則運算式即使用單一子運算式來達成這個目的。

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

在此例中,以括號括住的就是子運算式。 該子運算式包含一個或多個字母字元 (以 [a-z]+ 指定)。 規則運算式的第二部分是先前儲存之子相符項目的參考,也就是第二次出現的剛由放在括號內的運算式比對得出的單字。 \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

您也可以在取代文字內參考子運算式。

下列範例會使用上述的規則運算式,將連續出現兩次的完全相同單字取代成只出現一次的相同單字。 在 replace 方法中,$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 方法

概念

替代和子運算式

其他資源

規則運算式簡介