【发布时间】:2011-06-21 13:13:27
【问题描述】:
我目前正试图通过让用户输入公式来在 HTML5 <canvas> 上绘制公式。这通过eval() 很有效;但是,^ 在 Javascript 中表示按位异或,而在公式中应该表示“幂”。
所以基本上我必须将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 函数中?我真的不知道从哪里开始,所以任何提示将不胜感激。
【问题讨论】:
-
您的正则表达式也需要更彻底地适应系数。您可能应该让它检查变量前后的空格,并通过注入
*将系数与变量分开。您还必须实现()指示的相同语法规则 -
@Joel 感谢您的提示。 @Ben 抱歉没看到那个,谢谢。
-
— 不用担心!我只是想确保您不会错过答案中包含的信息。 :-)
标签: javascript regex parsing