【问题标题】:Using caret as exponent in Javascript [duplicate]在Javascript中使用插入符号作为指数[重复]
【发布时间】:2014-02-27 00:20:00
【问题描述】:

我正在尝试创建一个简单的图形计算器,用户可以在其中输入 f 的函数(如 f(x) = x^2+2x+6)。基本上,javascript 用某个数字替换函数中的 x,然后使用 eval() 评估函数。问题是,我希望用户能够输入 x^2 而不是默认的 JavaScript,即 Math.pow(x,2)。我猜这将是一些正则表达式,但我对它们几乎没有经验,并且个人觉得它们真的很混乱。是否可以将 x^3-x^2 之类的语句转换为 Math.pow(x,3)-Math.pow(x,2) ??

非常感谢您的帮助。

【问题讨论】:

  • 是的,这是可能的。你能告诉我们你到目前为止尝试了什么吗?您可以从这里开始使用正则表达式 regular-expressions.info
  • eval 是不好的做法,对任务来说是不必要的(不是说有帮助或任何事情,在大多数情况下这不是一件好事)
  • ^ 不是您唯一的问题,您还必须添加一个乘数运算符 (*)。
  • 这几乎是计算机科学中最受欢迎的作业,网​​站上对此进行了很好的介绍。然而,使用eval 和正则表达式是作弊。谷歌"parse math expression in JavaScript",你会得到数以千计的教程。
  • 用户应该可以输入f(x) = x^(2x + 1) + 1/(2^(2*x))吗?

标签: javascript regex math


【解决方案1】:

您想使用看起来类似于

的正则表达式
(.+)\^(.+)

这将匹配两个选择,然后您使用这些匹配项替换该字符串的实例。

Math.pow($1, $2)

Javascript 通过 String.prototype.replace 中的 function 选项支持这种操作

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter

【讨论】:

  • x^(y * 2 - 1) 怎么样?
  • “类似的东西”是我的出狱卡 ;)
  • @Pointy 那么我认为 AST 是要走的路。
  • 别忘了逃跑^ > \^
  • @ToniAlmeida 当然。那很愚蠢。为抬头干杯。
【解决方案2】:

1) 是的,这是可能的。如果您解析用户输入的内容,您可以轻松地自己编程。无论你在哪里看到 x^n,只要把它变成 Math.pow(x,n)。然后才评估。 这将适用于一个变量的多项式。

2) 如果您想更广泛地解决这个问题(对于更广泛的数学函数类别), 你需要想出一些语法并根据用户输入构建一个 AST。

http://en.wikipedia.org/wiki/Abstract_syntax_tree

【讨论】:

  • 我没有(也不会)投反对票,但您的回答确实没有解释太多。 (当然,这个问题有点宽泛。)
  • @peter.petrov 你真的没有给这个问题提供有用的答案。如果我问了这个问题,那么我希望得到的答案不会重复我提出的示例。
  • 通过编辑,它提供了新信息。我正在删除我的反对票。 :)
  • 我认为提问者想知道如何将 x^n 变成上述的,你刚刚告诉他这样做。
  • @DanPrince 好吧,也许吧。我只是对这个问题的理解略有不同。
猜你喜欢
  • 2017-09-08
  • 1970-01-01
  • 2011-04-06
  • 2012-03-08
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2018-01-04
  • 2023-03-29
相关资源
最近更新 更多