我现在试图通过让用户输入公式来在HTML5 <canvas>
上绘制公式。这很好,通过eval()
;然而,^
意味着在JavaScript中按位异或,它应该意味着'在公式中的权力'。重写公式字符串以用Math.pow替换^ b(a,b)
所以基本上我不得不重写一些像x^4
到Math.pow(x, 4)
。我想出了使用正则表达式。这一次却只能在一定程度上:
"x^4".replace(/(.*)\^(.*)/g, "Math.pow($1, $2)")
它改写x^4
到Math.pow(x, 4)
,但对于更先进的配方这一出错。例如,2 + x^4
被重写为Math.pow(2 + x, 4)
,而它当然应该是2 + Math.pow(x, 4)
。而且,如果指数在其周围有括号,例如2^(x+1) + 3
,当然应该改写为Math.pow(2, x+1) + 3
而不是Math.pow(2, x+1 + 3)
。
我将如何去重写这个,只有正确的部分被放入pow函数?我真的不知道从哪里开始,所以任何提示将不胜感激。
您的正则表达式需要更加彻底以适应系数。你应该让它检查变量前后的空白,并且通过注入`*`来分隔变量的系数。您还必须实现`()` – 2011-02-04 18:24:17
[RegEx for a^b而不是pow(a,b)]的可能重复所指示的相同语法规则(http://stackoverflow.com/questions/4777685/正则表达式为ab-instead-of-powa-b) – 2011-02-04 18:26:43