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

时间:2018-08-09 13:28:21

标签: javascript regex pegjs

我正在编写一个PegJS语法来解析SQL语句。我正在将函数拆分为function_id(function_args)。对于函数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))

1 个答案:

答案 0 :(得分:0)

正确处理参数的规则会有所帮助。另外,您可以在规则中使用{return name.join('');}表示法来组合已解析的字符串,而不必使用$()

args可以重复functionnonfunctionnonfunction通过向前捕获来捕获所有不是功能的东西。

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

func_name 
= $([A-Z]+)

open_p
= "("

close_p
= ")"

args
= function / nonfunction

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