【发布时间】:2015-09-08 15:04:36
【问题描述】:
我正在开发 JavaScript 中的函数解析器,它大致要求以下条件为真,才能将文本序列视为函数:
- 包含驼峰式名称(以非数字的小写字符开头)
- 可以有参数(如果没有参数,括号是可选的)
- 参数名称需要与函数名称具有相同的属性,并且可以有多个参数,以逗号分隔
- 返回变量名是可选的,可以在函数定义后用'->'指定(即 someFunc(var1)->retVal 或 someFunc->retVal。它们需要与函数名具有相同的属性。李>
现在假设我得到一个包含函数定义(一些有效,一些无效)的文本字符串,如下所示:
somefunc(var1,var2),SomeFunc,somefunc()->RetVal,somefunc()->retVal,somefunc->retVal
这可以使用以下正则表达式进行解析:
((?:\b[a-z]\w*)\(?(?:[a-z]\w*,?)*\)?(?:->[a-z]\w*)?(?=,|$))+
从中提取以下函数定义:
- somefunc(var1,var2)
- somefunc()->retVal
- somefunc->retVal
现在,尽管我的正则表达式工作正常,但我相信基于使用 this 正则表达式测试网站的一些调试,我可能会遇到一些回溯问题。例如,我相信当正则表达式在上面的字符串中命中 SomeFunc 时,会发生很多回溯。
有没有办法优化这个正则表达式?如果是这样,将来我可以将任何准则应用于我的正则表达式,以提高它们的效率吗?
【问题讨论】:
标签: javascript regex