如何防止以下正则表达式匹配两个 ( ) 之间的内容?

How to prevent the following regex to match things between two ( )s?

这个正则表达式:

\v\(.*\)\ze\s\-\>

匹配这个(包括括号):

functionDefinition = (matchedArgs) ->

一切正常。问题出在这里:

$(window).on "scroll", (e) ->

(char)不是单独匹配而是一起匹配,像这样:

$<<(window).on "scroll", (e)>> ->

如何修复正则表达式以便它们单独匹配?像这样:

$<<(window)>>.on "scroll", <<(e)>> ->

我将其更改为以下内容:

\v\(.{-}\)\ze\W

它在括号之间进行 non-greedy 匹配 .{-},后跟任何 non-letter 字符 \W


更新

我还以为你想匹配第一对 parens。改用这个:

\v\([^)]*\)\ze\s-\>

更新 2: 解释

当然:\v的意思很神奇,所以它避免了很多特殊字符的转义,比如圆括号,大括号等等。这个\([^)]*\)匹配的是non-greedy模式括号内的一些内容。 \ze\s-\> 是一个 zero-width 断言,后面有内容但没有匹配。