如何防止以下正则表达式匹配两个 ( ) 之间的内容?
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 断言,后面有内容但没有匹配。
这个正则表达式:
\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 断言,后面有内容但没有匹配。