由于某种原因,我目前正在制作机器人,我想添加一个命令,当某些用户键入<command> 1 + 2
和机器人将回答3
时,它会进行数学运算。如果是<command> 2 * 3
,则会回复6
。 (在这种情况下,我们只使用文本框,如果我在文本框中键入1 + 2,则显示“3”的警报。)
我的问题是,是否有可能通过任何机会发出这种命令? 如果是这样,我想知道如何。因为我已经学习了一些关于JavaScript RegEx的知识,我认为如果我使用它,它就会成功。
感谢高级人员
答案 0 :(得分:1)
你可以做很多事情。您可以eval
输入,但如果您想让其他人使用它,那就不好了(因为它会执行任何有效的JavaScript)。
我认为最好的方法是为每个动作制作一个命令。例如:
add 2 2 // 4
sub 2 2 // 0
mul 2 2 // 4
div 2 2 // 1
这是一个运行add命令的函数,你可以为sub,div和mul添加switch case。
function run(input) {
input = input.split(" ");
switch (input[0]) {
case "add":
return parseInt(input[1]) + parseInt(input[2]);
break;
}
}
如果您不想以这种方式制作机器人,那么它就会变得非常复杂。你要么必须评估输入,要么首先确认输入不是坏事。或者你可以构建自己的表达式解析器,这也很难。
答案 1 :(得分:1)
这是一个快速示例,在单击按钮时从文本框中选取表达式,然后执行计算。它使用正则表达式来分隔数字/运算符,并使用switch
来测试运算符的情况。非常简单。
const input = document.querySelector('input');
const button = document.querySelector('button');
button.addEventListener('click', handleClick, false);
function handleClick() {
const txt = input.value;
const expr = txt.match(/(\d+)\s?([\+\-\*\/])\s?(\d+)/);
const first = Number(expr[1]);
const operator = expr[2];
const second = Number(expr[3]);
switch (operator) {
case '+':
console.log(first + second);
break;
case '-':
console.log(first - second);
break;
case '*':
console.log(first * second);
break;
case '/':
console.log(first / second);
break;
}
}
&#13;
<input/><button>Submit</button>
&#13;
答案 2 :(得分:-2)
您可以尝试使用eval功能