正規表示式使用指南六

2021-04-06 21:21:15 字數 1587 閱讀 3630

正規表示式的最重要功能之一是儲存匹配的模式的一部分以供以後重新使用的能力。您可能想起,若在正規表示式模式或模式的一部分兩側加上括號,就會導致表示式的一部分被儲存到臨時緩衝區中。可以通過使用非捕獲元字元 ?:、?= 或 ?! 來重寫捕獲。

每個捕獲的子匹配項按照它們在正規表示式模式中從左到右出現的順序儲存。緩衝區編號從 1 開始,最多可儲存 99 個捕獲的子表示式。可以使用 /n 來訪問每個緩衝區,其中 n 是標識特定緩衝區的一位或兩位十進位制數字。

反向引用的最簡單的、最有用的應用之一,是提供查詢文字中兩個相同的相鄰單詞的匹配項的能力。以下面的句子為例:

is is the cost of of gasoline going up up?

上面的句子很顯然有多個重複的單詞。如果能設計一種方法定位該句子,而不必查詢每個單詞的重複出現,那該有多好。下面的正規表示式使用單個子表示式來實現這一點:

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

捕獲的表示式,正如 [a-z]+ 指定的,包括乙個或多個字母。正規表示式的第二部分是對以前捕獲的子匹配項的引用,即,單詞的第二個匹配項正好由括號表示式匹配。/1 指定第乙個子匹配項。字邊界元字元確保只檢測整個單詞。否則,諸如「is issued」或「this is」之類的片語將不能正確地被此表示式識別。

正規表示式後面的全域性標記 (g) 指示,將該表示式應用到輸入字串中能夠查詢到的盡可能多的匹配。表示式的結尾處的不區分大小寫 (i) 標記指定不區分大小寫。多行標記指定換行符的兩邊可能出現潛在的匹配。

使用上面的正規表示式,下面的**可以使用子匹配項資訊,將文字字串中的兩個連續相同的單詞的匹配項替換為同一單詞的單個匹配項:

var ss = "is is the cost of of gasoline going up up?./n";

var re = //b([a-z]+) /1/b/gim; //create regular expression pattern.

var rv = ss.replace(re,"$1"); //replace two occurrences with one.

在 replace 方法內使用 $1 引用第乙個儲存的子匹配項。如果您有多個子匹配項,您將通過使用 $2、$3 等依次引用它們。

下面的正規表示式提供該功能:

/(/w+):([^/:]+)(:/d*)?([^# ]*)/

第乙個括號子表示式捕獲 web 位址的協議部分。該子表示式匹配在冒號和兩個正斜槓前面的任何單詞。第二個括號子表示式捕獲位址的域位址部分。該子表示式匹配不包括 / 或 : 字元的任何字串行。第三個括號子表示式捕獲埠號(如果指定了的話)。該子表示式匹配冒號後面的零個或多個數字。最後,第四個括號子表示式捕獲 web 位址指定的路徑和/或頁資訊。該子表示式匹配 # 或空格字元之外的乙個或多個字元。

將正規表示式應用到上面的 uri,各子匹配項包含下面的內容:

regexp.$1 包含「http」

regexp.$2 包含「msdn.microsoft.com」

regexp.$3 包含「:80」

regexp.$4 包含「/scripting/default.htm」

正規表示式使用指南二

下表從最高到最低說明了各種正規表示式運算子的優先順序順序 運算子 說明 轉義符 括號和中括號 限定符 anymetacharacter,anycharacter 定位點和序列 替換 字元的優先順序比替換運算子高,替換運算子允許 m food 與 m 或 food 匹配。若要匹配 mood 或 foo...

正規表示式使用指南四

本節前面的主題中的示例只涉及章節標題查詢。字串 chapter 後面跟空格和數字的任何匹配項可能是實際章節標題,或者也可能是指向另一章的交叉引用。由於真正的章節標題總是出現在行的開始,所以設計一種方法只查詢標題而不查詢交叉引用可能很有用。定位點提供該能力。定位點使您能夠將正規表示式固定到行首或行尾。...

正規表示式使用指南七

正規表示式 符號匹配字串的開頭。例如 abc 與 abc xyz 匹配,而不與 xyz abc 匹配 符號匹配字串的結尾。例如 abc 與 xyz abc 匹配,而不與 abc xyz 匹配。注意 如果同時使用 符號和 符號,將進行精確匹配。例如 abc 只與 abc 匹配 符號匹配0個或多個前面的...