2009-08-12 54 views
13

我用正則表達式徹底無望啓動...正則表達式:查找字符串不與X

我有一個名爲Velocimacro的#addButton,我有一個JS函數命名addButton()。現在我想查找調用JS函數的所有地方。所以我需要搜索「addButton」,其中「addButton」不是以散列鍵開頭。

任何想法?

回答

12
/([^#]|^)addButton/ 

將其中「Add按鈕」是通過「#」或字符串的開頭之前每個字符串相匹配。

+0

或者爲了使它更健壯一些(以便它會匹配字符串的開頭),'/(?:^ | [^#])addButton /' – Amber 2009-08-12 06:50:38

+0

真棒! ...我想我應該投入一些時間在正則表達式...它只是不斷彈出到處... – peirix 2009-08-12 06:51:48

22

我不知道Velocimacro是什麼(從其他答案判斷,我猜「addButton」會出現在它自己的行上?),但是找到單詞「addButton」的確定方法並不是先行的#如下:

/(?<!#)\baddButton\b/ 

它會:

  1. (?<!#)(?)
    • 確保當前位置不是由#(哈希標記)preceeded
  2. \b(?)
    • 確保當前位置是一個字邊界(在這種情況下,它可以確保之前的字符不是單詞字符和下一個字符是)
  3. addButton(?)
    • 匹配「Add按鈕」
  4. \b(?)
    • 確保有在當前位置的單詞邊界。這避免了匹配的東西,如「addButtonNew」(因爲「Add按鈕」和「新」之間無字邊界)

與此正則表達式的區別,另一個是,這個人會不會消耗「addButton」之前的字符。

學習正則表達式的好資源是regular-expressions.info。點擊上面列表中的(?)鏈接,查看該正則表達式相關頁面的鏈接。

+0

出色的答案。謝謝! (:我只是在Eclipse中進行正則表達式搜索,所以消費角色並不重要。(順便說一句,Velocimacro就像Velocity(開源模板語言)中的一個函數,你可以像普通函數那樣調用它們,只有Velocity中的每個命令都以散列鍵開頭) – peirix 2009-08-12 10:00:40

+0

謝謝,我怎麼說「不匹配# ,如果後面跟着任意數量的空格?「 – 2016-05-06 09:18:13