【发布时间】:2018-08-09 13:28:20
【问题描述】:
我正在编写一个 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))
【问题讨论】:
-
如果是
),为什么不直接删除最后一个字符?"AVG(A + AVG(B + C))".replace(/\)$/, '')" -
不幸的是,该字符串无法被操作,因为它是在 PegJS 中解析的较大字符串的一部分。因此只允许 PegJS 操作。
标签: javascript regex pegjs