Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript从用户输入中读取F(x)函数?_Javascript_Jquery Plugins_Mathjax - Fatal编程技术网

如何使用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)