我想找到一个可以处理和评估简单表达式的javascript解析器.解析器应该能够评估常规数学表达式,并支持带参数的自定义函数.它还必须支持字符串处理.字符串连接|| 操作员支持是首选,但是如果+可以做到这一点也没关系.
应由解析器处理的表达式示例:
3*(2 + 1) - 1
2*func(2,2)
func('hello world',0,5)|| '你'
有没有人实现这样的事情或在哪里可以找到类似的东西?
我有一个ActionScript解析器的修改版本(用AS编写,而不是解析AS),它支持自定义函数,但不支持字符串.虽然添加字符串支持可能很容易.我会把它上传到某个地方,这样你就可以得到它http://silentmatt.com/parser2.js http://silentmatt.com/parser3.js.
编辑:我很容易添加对字符串的基本支持.它不支持转义序列,并且toJSFunction不起作用,但它只需要几分钟才能使它工作.将连接运算符更改为"||" 应该也很容易.
以下是评估示例表达式的方法:
js> var parser = new Parser(); js> parser.parse("3 * (2 + 1) - 1").evaluate(); 8 js> parser.parse("2 * func(2; 2)").evaluate({ func:Math.pow }); 8 js> function substr(s, start, end) { return s.substring(start, end); } js> parser.parse("func('hello world'; 0; 5) + ' you'").evaluate({ func:substr }); hello you
我不记得为什么我用分号作为参数分隔符; 我认为它与区分功能和内置"操作员"功能有关.
另一个编辑:
我一直在玩这个,现在有一个版本更好的字符串支持http://silentmatt.com/parser3.js(toJSFunction工作,你可以使用标准的JavaScript转义序列).它还使用逗号分隔所有函数的参数,并||
使用字符串连接运算符代替+
,仅添加.