2014-02-27 13 views
0

我想创建一个简单的图形计算器,用户输入函数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)?在javascript中使用脱字符号作为指数

非常感谢。

+2

是的,它是可能的。你能告诉我们你到目前为止尝试过什么吗?你可以从这里开始正则表达式:http://www.regular-expressions.info/ – elclanrs

+0

'eval'是不好的练习,对于任务来说是不必要的(不是说有帮助或者什么,在大多数情况下这不是一件好事) ) –

+0

'^'不是你唯一的问题,你还必须添加一个乘数运算符(*)。 –

回答

0

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

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

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

+0

Downvoted?为什么? –

+0

我没有(也不会)downvote,但你的答案真的不*解释*很多。 (当然,这个问题有点宽泛。) – Pointy

+0

@ peter.petrov你真的不给这个问题有用的答案。如果我问了这个问题,那么当我问我的时候,我会期待一个答案,它不会重申我作为一个例子。 –

4

你想使用看起来沿

(.+)\^(.+) 

这东西线将同时匹配选择正则表达式,你再替换字符串的情况下,使用这样的比赛。

Math.pow($1, $2) 

JavaScript有这种操作与功能选项支持String.prototype.replace

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

+4

x ^(y * 2 - 1)呢? – Pointy

+0

“有些事情”是我离开监狱免费卡; –

+0

@Pointy然后AST是要走的路,我想。 –

相关问题