正则表达式排除词
Regular Expression Exclude Word
我正在尝试替换所有名称为 "eventHandler" 或以“...EventHandler”结尾的事件处理函数,以封装在一个公共事件处理函数中,该函数在之前执行其他任务实际上调用事件处理程序。
简而言之,我正在尝试使用查找和替换中的正则表达式(在 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
测试结果如下:
如果原来的 EventHandler 只有 2 个参数,这可以工作
[查找]
(eventHandler|\w+EventHandler)\((.*?),(.*)\)
[替换]
processEventHandler(, , )
基本上,您的正则表达式与 process
匹配的字符串的一部分是因为正则表达式没有锚定在开头。如果需要匹配字符串开头的字符串,使用^
。如果您打算只在较大的文本中匹配它们,请使用 \b
(单词边界)。
您可以使用锚定在前导词边界的否定前瞻的正则表达式:
(?i)(\b(?!process)\w*EventHandler)\(([^)]*)\)
正则表达式(不区分大小写,因为 (?i)
内联修饰符)匹配:
\b
- 单词边界
(?!process)
- 如果找到以下字符序列,则匹配失败的否定前瞻:\w*
- 零个或多个字母数字符号 + EventHandler
\(
- 左括号
([^)]*)
- )
以外的零个或多个字符
\)
- 右括号
我正在尝试替换所有名称为 "eventHandler" 或以“...EventHandler”结尾的事件处理函数,以封装在一个公共事件处理函数中,该函数在之前执行其他任务实际上调用事件处理程序。
简而言之,我正在尝试使用查找和替换中的正则表达式(在 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
测试结果如下:
如果原来的 EventHandler 只有 2 个参数,这可以工作
[查找]
(eventHandler|\w+EventHandler)\((.*?),(.*)\)
[替换]
processEventHandler(, , )
基本上,您的正则表达式与 process
匹配的字符串的一部分是因为正则表达式没有锚定在开头。如果需要匹配字符串开头的字符串,使用^
。如果您打算只在较大的文本中匹配它们,请使用 \b
(单词边界)。
您可以使用锚定在前导词边界的否定前瞻的正则表达式:
(?i)(\b(?!process)\w*EventHandler)\(([^)]*)\)
正则表达式(不区分大小写,因为 (?i)
内联修饰符)匹配:
\b
- 单词边界(?!process)
- 如果找到以下字符序列,则匹配失败的否定前瞻:\w*
- 零个或多个字母数字符号 +EventHandler
\(
- 左括号([^)]*)
-)
以外的零个或多个字符
\)
- 右括号