javascript - 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))
解决方案
正确处理论点的规则会有所帮助。此外,{return name.join('');}
您可以$()
在规则中使用符号来组合已解析的字符串,而不是使用。
args
可以是也可以是function
重复nonfunction
的。nonfunction
通过前瞻捕获所有不是函数的内容。
function
= func_name open_p (args+ / "") close_p
func_name
= $([A-Z]+)
open_p
= "("
close_p
= ")"
args
= function / nonfunction
nonfunction
= $((!(function / close_p) .)+)
推荐阅读
- javascript - 表内的下拉列表位于列下方
- groovy - 从列表映射中打印唯一键迭代groovy
- asp.net-core - Netlify 和 ASP.NET Core Web API
- sql-server - Windows 中可以连接哪些 SQL 驱动程序以及 ConnString 上的 SqlClient 驱动程序是什么?
- python - txt文件到python中的二叉树
- python - 我们如何为 Pyspark Dataframe 列中最后出现的值设置标志
- javascript - 如何在不同页面上显示来自本地存储的此信息
- angular - Angular 4 路由:导航到主页
- html - 在制作多语言网站时,我应该将类/id 名称重命名为相应的 html lang 属性吗?
- sql - Teradata SQL enable_quoted_identifiers