Javascript PegJS-匹配所有字符(包括)除非)是最后一个字符

Javascript PegJS-匹配所有字符(包括)除非)是最后一个字符,javascript,regex,pegjs,Javascript,Regex,Pegjs,我正在编写一个PegJS语法来解析SQL语句。我正在将一个函数拆分为function\u id(function\u args)。对于函数参数,我希望匹配所有字符,包括(和),除了最后一个),这是嵌套函数所必需的 如何编写规则以匹配包含)的所有字符,除非)是字符串中的最后一个字符 语法如下所示 Function = func_name open_p args close_p func_name = name:[A-Z]+ {return name.join('');} open_p

我正在编写一个PegJS语法来解析SQL语句。我正在将一个函数拆分为
function\u id(function\u args)
。对于函数参数,我希望匹配所有字符,包括
,除了最后一个
,这是嵌套函数所必需的

如何编写规则以匹配包含
的所有字符,除非
是字符串中的最后一个字符

语法如下所示

 Function 
 = func_name open_p args close_p

func_name 
= name:[A-Z]+ {return name.join('');}

open_p
= "("

close_p
= ")"

args
= ar:(.*[^)]) {return ar.join('');}
测试字符串是

AVG(A + AVG(B + C))

正确处理参数的规则会有所帮助。此外,您可以在规则中使用
$()
符号来组合解析的字符串,而不是使用
{return name.join(“”);}

args
可以重复执行
功能
非功能
<代码>非功能通过前瞻捕获所有非功能的内容

function 
 = func_name open_p (args+ / "") close_p

func_name 
= $([A-Z]+)

open_p
= "("

close_p
= ")"

args
= function / nonfunction

nonfunction
= $((!(function / close_p) .)+)

可能重复如果最后一个字符是
,为什么不删除它呢<代码>“AVG(A+AVG(B+C))”。替换(/\)$/,“”)不幸的是,该字符串不能被操作,因为它是在PegJS中解析的较大字符串的一部分。因此,只允许PegJS操作。