[英]Regular Expression Exclude Word
我正在嘗試替換名稱為“eventHandler”或以“... EventHandler”結尾的所有事件處理函數,以封裝在公共事件處理函數中,該函數在實際調用事件處理程序之前執行其他任務。
簡而言之,我正在嘗試使用find&replace中的正則表達式(在崇高的文本編輯器中)執行此操作:
loginEventHandler (args,callback)=> processEventHandler ( loginEventHandler ,args,callback)
[ 找 ]
(事件處理程序?|!(processEventHandler)\\ w +事件處理程序)(。(*))
[替換]
processEventHandler($ 1,$ 2)
這沒有按預期工作。 該find也匹配rocessEventHandler 。 如果函數名稱為“processEventHandler”,如何忽略匹配函數?
我嘗試了以下問題中提到的解決方案,但沒有幫助。
這是測試結果:
基本上,你的正則表達式匹配字符串的一部分與process
是因為正則表達式沒有錨定在開始。 如果需要匹配字符串開頭的字符串,請使用^
。 如果您打算在較大的文本中匹配它們,請使用\\b
(單詞邊界)。
你可以使用一個帶有負前瞻的正則表達式,它固定在前導詞邊界:
(?i)(\b(?!process)\w*EventHandler)\(([^)]*)\)
請參閱正則表達式演示
正則表達式(由於(?i)
內聯修飾符不區分大小寫)匹配:
\\b
- 單詞邊界 (?!process)
- 如果找到以下字符序列,則表示匹配失敗的否定前瞻: \\w*
- 零個或多個字母數字符號+ EventHandler
\\(
- 左括號 ([^)]*)
- 除零之外的零個或多個字符)
\\)
- 右括號 如果原始的EventHandler只有2個參數,那么這可能有效
[ 找 ]
(eventHandler|\\w+EventHandler)\\((.*?),(.*)\\)
[替換]
processEventHandler($1, $2, $3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.