如何使用JavaScript从用户输入中读取F(x)函数?
当用户在文本框中输入如何使用JavaScript从用户输入中读取F(x)函数?,javascript,jquery-plugins,mathjax,Javascript,Jquery Plugins,Mathjax,当用户在文本框中输入f(x)公式时,我遇到了一个问题,例如:x^2+4x 我通过替换该文本框中的每个x,将x的值设置为5,使程序变成5^2+45 问题是当4x变成45时,它必须是程序中的4*5,但我不知道如何更改它,有人知道读取f(x)方程的JavaScript库吗 注意: 我使用函数fx更改x。替换(/x/g,'5')和 我正在使用JQuery,Mathjax库从用户输入和ds3.js中打印f(x),来创建图表f(x),但目前还没有成功。解决这个问题的一种方法是,如果“x”只跟在数字后面(例如
f(x)
公式时,我遇到了一个问题,例如:x^2+4x
我通过替换该文本框中的每个x
,将x
的值设置为5
,使程序变成5^2+45
问题是当4x
变成45
时,它必须是程序中的4*5
,但我不知道如何更改它,有人知道读取f(x)
方程的JavaScript库吗
注意:
我使用函数fx更改x
。替换(/x/g,'5')
和
我正在使用JQuery,Mathjax库从用户输入和ds3.js中打印
f(x)
,来创建图表f(x)
,但目前还没有成功。解决这个问题的一种方法是,如果“x”只跟在数字后面(例如4x、34x等),则在用户输入中添加一个“*”
fx.replace(/(\d+)x/g,“$1*x”)您可能需要从以下想象开始:您获取用户输入并将其存储为字符串。您的目标是插入“*”符号,不管它是4x、4y还是4z,无论什么
//THIS CODE MIGHT NEED SOME CORRECTION (NOT SURE) AND DEFINITELY NEEDS
// TO BE REFACTORED AND IS HERE FOR ILLUSTRATION PURPOSE ONLY
var fx="x^2+4x";
var x=3; //LET'S ASSUME YOU HAVE THIS VALUE
eq_tokens=fx.split("")//eq_tokens=[x,^,2,+,4,x]
//Now since you have separated all the equations items,
// you can go forward and add * sign between 4 and x
var temp_item;
var new_eq_tokens=[];
for (item in eq_tokens){
if eq_tokens.indexOf(item)==0||((eq_tokens.length)-1) {
temp_item=item;
new_eq_tokens.push(item);
continue;
}
if parseInt(temp_item) && !parseInt(item) {
if (item in ["+","-"...AND OTHER OPERATORS INCLUDING "."])
{
new_eq_tokens.push(item);
temp_item=item;
}
else {
new_eq_tokens.push("*")
new eq_tokens.push(item)
}
else {
new_eq_tokens.push(item);
temp_item=item;
}
}
// NOW YOUR NEW ARRAY WILL HAVE CORRESPONDING "*" IN YOUR CODE IF I DID NOT
// WRITE SOMETHING IN ERROR BUT YOU SHOULD GET THE GIST
// new_eq_tokens=["x","^","2","+","4","*","x"]
new_eq=new_eq_tokens.join("");
your_answer=eval(new_eq);
请记住,使用eval会导致糟糕的代码优化,并使您的代码容易受到注入攻击。因此,验证非常重要。但与评估相关的一些问题往往被夸大了,超出了实际需要。我的建议是:评估真的就像金钱。如果你能驯服它,埃瓦尔是一个伟大的奴隶;如果它变得狂野,它是一个可怕的主人 在替换
x
之前,请尝试将/(\d)\s*x/g
替换为“$1*x”
。哇,它很管用,谢谢你,伙计,但我仍然对正则表达式感到困惑,1是什么意思?还有(\d)\sx,为什么在x之前有一个“”,而\s\s是一个空格字符,对吗?我假设您希望正确处理4x
)因此,(\d)
意味着“获取一个数字并保存它”;\s*
意味着“任意数量的空格,不包括任何空格”,那么你就拥有了x
。在替换中,$1
是第一个“保存”的东西(数字),然后它就是*x
。大概您还需要考虑R=5+BX+(.x)