正则表达式排除Word

时间:2016-02-01 10:06:37

标签: javascript regex sublimetext2 sublimetext3 sublimetext

我正在尝试替换名称为“eventHandler”或以“... EventHandler”结尾的所有事件处理函数,以封装在公共事件处理函数中,该函数在实际调用事件之前执行其他任务处理程序。

简而言之,我正在尝试使用find&中的正则表达式(在崇高的文本编辑器中)。替换:

loginEventHandler (args,callback)=> processEventHandler loginEventHandler ,args,callback)

[查找]

(事件处理程序?|!(processEventHandler)\ w +事件处理程序)(。(*))

[替换]

processEventHandler($ 1,$ 2)

这不按预期工作。该查找还匹配 rocessEventHandler 。如果函数名称为“processEventHandler”,我该如何忽略匹配函数?

我尝试了以下问题中提到的解决方案,但没有帮助。

Regular expression to match line that doesn't contain a word?

A regular expression to exclude a word/string

以下是测试结果:

Regular Expression Test Result

2 个答案:

答案 0 :(得分:2)

基本上,你的正则表达式匹配字符串的一部分与process是因为正则表达式没有锚定在开始。如果需要匹配字符串开头的字符串,请使用^。如果您打算在较大的文本中匹配它们,请使用\b(字边界)。

您可以使用具有固定在前导词边界的负前瞻的正则表达式:

(?i)(\b(?!process)\w*EventHandler)\(([^)]*)\)

请参阅regex demo

正则表达式(因(?i)内联修饰符而不区分大小写)匹配:

  • \b - 字边界
  • (?!process) - 如果找到以下字符序列,则匹配失败的否定前瞻:\w* - 零个或多个字母数字符号+ EventHandler
  • \( - 左括号
  • ([^)]*) - 除)
  • 以外的零个或多个字符
  • \) - 右括号

答案 1 :(得分:0)

如果原始EventHandler只有2个参数,则可以使用

[查找]

(eventHandler|\w+EventHandler)\((.*?),(.*)\)

[替换]

processEventHandler($1, $2, $3)