正規表示式的最重要功能之一是儲存匹配的模式的一部分以供以後重新使用的能力。您可能想起,若在正規表示式模式或模式的一部分兩側加上括號,就會導致表示式的一部分被儲存到臨時緩衝區中。可以通過使用非捕獲元字元 ?:、?= 或 ?! 來重寫捕獲。
每個捕獲的子匹配項按照它們在正規表示式模式中從左到右出現的順序儲存。緩衝區編號從 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 位址指定的路徑和/或頁資訊。該子表示式能匹配不包括 # 或空格字元的任何字串行。
字元匹配 與 中括號表示式頂
0 踩
C 中const引用和非const引用的使用注意
今天學習時突然有疑惑,c 有了指標為何還要設計引用呢?後來看到一篇部落格豁然開朗 為什麼 c 有指標了還要引用?總結一下 更加簡潔好看了 由於引用必須被初始化,並且之後也無法重新繫結其他物件,這樣就更安全了 為了操作符過載,比如部落格中那個過載 的例子 並且,在了解了這些之後,對引用的一些其他特性也...
relationship 關係引用和反向關係引用
relationship 增加了關係引用,為了查詢方便.由原先的2次查詢,改為了1次查詢 乙個角色對應多個使用者 一的一方 role 定義關係引用和反向引用.多的一方 user 定義外來鍵 users 是為了當前模型方便查詢定義的.backref role 這裡的role是給關聯模型提供的查詢屬性c...
正規表示式中的反向引用
反向引用 nnn 對指定分組已捕獲的字串進行引用,對當前匹配的字串,引用指定分組捕獲到的字串,主要用於文字的替換。說明deelx 支援的反向引用格式 反向引用 說明 nnn 對指定編號的分組進行反向引用 g對指定名字的命名分組進行反向引用 k k name 另外,如果被引用的捕獲組 括號對 未進行捕...