Javascript 正则表达式排除字

Javascript 正则表达式排除字,javascript,regex,sublimetext2,sublimetext3,sublimetext,Javascript,Regex,Sublimetext2,Sublimetext3,Sublimetext,我试图替换所有名为“eventHandler”或以“…eventHandler”结尾的事件处理函数,将其封装在一个公共事件处理函数中,该函数在实际调用事件处理程序之前执行其他任务 简言之,我正尝试使用find&replace中的正则表达式(在sublime文本编辑器中)执行此操作: loginEventHandler(参数,回调)=>processEventHandler(loginEventHandler,参数,回调) [Find] (eventHandler |(?!processEvent

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

简言之,我正尝试使用find&replace中的正则表达式(在sublime文本编辑器中)执行此操作:

loginEventHandler(参数,回调)=>processEventHandler(loginEventHandler,参数,回调)

[Find]

(eventHandler |(?!processEventHandler)\w+eventHandler)((.*))

[替换]

processEventHandler($1,$2)

这不是预期的效果。该查找还匹配了ProcessEventHandler。如果函数名为“processEventHandler”,如何忽略匹配函数

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

以下是测试结果:


如果原始EventHandler只有2个参数,这可能会起作用

[Find]

(eventHandler\w+eventHandler)\(.*),(.*)\)

[替换]


processEventHandler($1,$2,$3)
基本上,您的正则表达式将字符串的一部分与
process
匹配是因为正则表达式没有锚定在开头。如果需要匹配字符串开头的字符串,请使用
^
。如果您只想在较大的文本中匹配它们,请使用
\b
(单词边界)

可以使用在前导单词边界处锚定负前瞻的正则表达式:

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

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

  • \b
    -单词边界
  • (?!process)
    -如果找到以下字符序列,则会导致匹配失败的负前瞻:
    \w*
    -零个或多个字母数字符号+
    事件处理程序
  • \(
    -左括号)
  • ([^)]*)
    -零个或多个字符,而不是
  • \)
    -右括号

您使用的是不支持Boost正则表达式语法的正则表达式测试程序。将带有PCRE的regex101用作regex falvor。另外,请在问题本身中发布示例文本。以下是示例文本:loginEventHandler(err,result)processEventHandler(loginEventHandler,err,result)eventHandler(err,result)appInitEventHandler(err,result)initProcessEventHandler(err,result)initProcessEventHandler(err,result)generic(e,r)试试这个:?@AnkitMishra不能使用^。例如:返回someEventHandler(e,r);我在正则表达式中唯一更改的是,我使用了(.*)而不是([^]*)来匹配函数调用,如下所示<代码>返回loginEventHandler(新错误(“无效凭证”),结果)如果这些字符串总是在一行上,这是正常的。如果不是这种情况,请使用
(?si)(\b(?!process)\w*EventHandler)\(*?)或甚至
(?si)(\b(?!process)\w*EventHandler)\(*?);(?=\h*(?:$\R))