JavaScript-在一个文本框中添加两个数字(仍然是字符串)

JavaScript-在一个文本框中添加两个数字(仍然是字符串),javascript,node.js,bots,Javascript,Node.js,Bots,出于某种原因,我目前正在制作一个机器人,我想添加一个命令,当一些用户键入1+2并且机器人将回答3时,该命令将执行数学运算。当它是2*3时,它会回复6。(我们在这个例子中使用textbox,如果我在textbox中键入1+2,则会出现一个显示“3”的警报) 我的问题是,有没有可能做出这样的命令? 如果是的话,我想知道怎么做。因为我已经了解了一些JavaScript正则表达式,我想如果我使用它,它会成功的 感谢高级人员您可以尝试使用函数您可以做很多事情。您可以eval输入,但如果您想让其他人使用它,

出于某种原因,我目前正在制作一个机器人,我想添加一个命令,当一些用户键入
1+2
并且机器人将回答
3
时,该命令将执行数学运算。当它是
2*3
时,它会回复
6
。(我们在这个例子中使用textbox,如果我在textbox中键入1+2,则会出现一个显示“3”的警报)

我的问题是,有没有可能做出这样的命令? 如果是的话,我想知道怎么做。因为我已经了解了一些JavaScript正则表达式,我想如果我使用它,它会成功的


感谢高级人员

您可以尝试使用函数

您可以做很多事情。您可以
eval
输入,但如果您想让其他人使用它,这并不好(因为它将执行任何有效的JavaScript)

我认为,最好的方法是对每个动作发出命令。例如:

add 2 2 // 4
sub 2 2 // 0
mul 2 2 // 4
div 2 2 // 1
这里有一个函数将运行add命令,您可以为sub、div和mul添加开关用例

function run(input) {
    input = input.split(" ");
    switch (input[0]) {
        case "add":
            return parseInt(input[1]) + parseInt(input[2]);
            break;
     }
}

如果你不想让你的机器人这样,那么它会变得非常复杂。您或者必须评估输入,但首先验证输入是否有问题。或者,您可以构建自己的表达式解析器,这也是非常困难的。

下面是一个快速示例,它可以在单击按钮时从文本框中提取表达式,并执行计算。它使用一个正则表达式来分离数字/运算符,并使用一个
开关来测试运算符情况。很简单

const input=document.querySelector('input');
const button=document.querySelector('button');
addEventListener('click',handleClick,false);
函数handleClick(){
const txt=input.value;
常量expr=txt.match(/(\d+)\s?([\+\-\*\/])\s?(\d+/);
const first=Number(表达式[1]);
常量运算符=expr[2];
常数秒=数字(表达式[3]);
开关(操作员){
格“+”:
console.log(第一个+第二个);
打破
案例'-':
console.log(第一个-第二个);
打破
案例“*”:
console.log(第一个*第二个);
打破
案例“/”:
控制台日志(第一次/第二次);
打破
}
}

提交
您尝试了什么?你做了什么研究?当然这是可能的,但是关于SO的一个问题预计会显示出研究的努力。例如,我认为你的问题实际上是这个问题的完全重复:我不确定这一点,因为我是全新的。这就是我来这里的原因,我会在cale_b1上查看。定义运算符:
const运算符={add:(a,b)=>+a++b,mult:(a,b)=>+a*+b}
-2。使用正则表达式解析:
const op=“mult 1 2”。匹配(/^(\w+)\s+(\d+)\s+(\d+)$/)-3。评估:
if(操作和操作员[op[1]])警报(操作员[op[1]](操作[2],操作[3])
eval
对于一个初学者来说就像是邪恶的,太危险了-1同意,但将带来要求的结果。否则他应该实现某种简单的解析器(甚至可能被支持的运算符拆分)我讨厌看到人们对答案投反对票(这就是为什么我喜欢在评论和符号中投反对票,如果它们有负面影响的话)。无论如何,我完全同意你的观点,但我只想提到“如果”OP希望使用您的方法,注意不要在以后抱怨,或者在您的答案中添加一些关于副作用的exta信息。我建议你不要回答重复的问题。你的责任是首先成为SO的管理员,然后提供新的答案。@cale_b我没有看到你的评论指出它是重复的。谢谢,我最终使用了math.js以及你发给我的代码,也许我只需要编辑一点,这样它就可以在我的项目中工作了