javascript - 正则表达式排除词

标签 javascript regex sublimetext2 sublimetext3 sublimetext

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

简而言之,我正在尝试使用查找和替换中的正则表达式(在 sublime 文本编辑器中)执行此操作:

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

[查找]

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

[替换]

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

最佳答案

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

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

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

参见 regex demo

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

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

关于javascript - 正则表达式排除词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35127728/

相关文章:

java - 在java中按字符拆分字符串

html - Sublime Text 2 保存 css 时出错 [ERROR 2]

javascript - 正则表达式检查 & ( ) 和重复字母

php - 在 PHP 代码中使用正则表达式

SublimeText 片段的正则表达式

sublimetext2 - 更改 python 解释器 - Sublime Text 2

javascript - 当我们将原语视为 JavaScript 中的对象时会发生什么?

javascript - Yup.string().matches() 在您输入时交替显示有效和无效

javascript - react redux项目报错如何解决?

javascript - Jquery 链接选择器由于某种原因无法工作