天天看點

javascript正規表達式/g與/i及/gi的意義

這個switch就有三種值 g: 全局比對 i: 忽略大小寫 gi: 全局比對 + 忽略大小寫 JScript 語言參考

--------------------------------------------------------------------------------

  後向引用 正規表達式一個最重要的特性就是将比對成功的模式的某部分進行存儲供以後使用這一能力。請回想一下,對一個正規表達式模式或部分模式兩邊添加圓括号将導緻這部分表達式存儲到一個臨時緩沖區中。可以使用非捕獲元字元 '?:', '?=', or '?!' 來忽略對這部分正規表達式的儲存。

  所捕獲的每個子比對都按照在正規表達式模式中從左至右所遇到的内容存儲。存儲子比對的緩沖區編号從 1 開始,連續編号直至最大 99 個子表達式。每個緩沖區都可以使用 '\n' 通路,其中 n 為一個辨別特定緩沖區的一位或兩位十進制數。

  後向引用一個最簡單,最有用的應用是提供了确定文字中連續出現兩個相同單詞的位置的能力。請看下面的句子: Is is the cost of of gasoline going up up? 根據所寫内容,上面的句子明顯存在單詞多次重複的問題。如果能有一種方法無需查找每個單詞的重複現象就能修改該句子就好了。下面的 JScript 正規表達式使用一個子表達式就可以實作這一功能。

等價的 VBScript 表達式為:

  在這個示例中,子表達式就是圓括号之間的每一項。所捕獲的表達式包括一個或多個字母字元,即由'[a-z]+' 所指定的。該正規表達式的第二部分是對前面所捕獲的子比對的引用,也就是由附加表達式所比對的第二次出現的單詞。'\1'用來指定第一個子比對。單詞邊界元字元確定隻檢測單獨的單詞。如果不這樣,則諸如 "is issued" 或 "this is" 這樣的短語都會被該表達式不正确地識别。

  在 JScript 表達式中,正規表達式後面的全局标志 ('g') 表示該表達式将用來在輸入字元串中查找盡可能多的比對。大小寫敏感性由表達式結束處的大小寫敏感性标記 ('i') 指定。多行标記指定可能出現在換行符的兩端的潛在比對。對 VBScript 而言,在表達式中不能設定各種标記,但必須使用 RegExp 對象的屬性來顯式設定。   

  使用上面所示的正規表達式,下面的 JScript 代碼可以使用子比對資訊,在一個文字字元串中将連續出現兩次的相同單詞替換為一個相同的單詞:

繼續閱讀