Javascript 搜索数字字符串

Javascript 搜索数字字符串,javascript,math,nlp,string-parsing,square-root,Javascript,Math,Nlp,String Parsing,Square Root,我有一个javascript聊天机器人,用户可以在输入框中键入任何他们喜欢的问题,并希望得到准确的答案。我可以这样做,但我知道我完全错了,因为我不知道这个数字会出现在句子中的什么位置。如果一个人准确输入: 5的平方根是多少这很好 如果他输入像这样的东西,它不会 5的平方根是多少 5的平方根是多少 你知道5的平方根是多少吗 等 我需要能够确定数字出现在句子中的什么地方,然后从那里开始计算。注意,下面这行是一个更大的工作聊天机器人的一部分。在下面的一行中,我只是想回答任何平方根问题,不管数字出现在句

我有一个javascript聊天机器人,用户可以在输入框中键入任何他们喜欢的问题,并希望得到准确的答案。我可以这样做,但我知道我完全错了,因为我不知道这个数字会出现在句子中的什么位置。如果一个人准确输入:

5的平方根是多少这很好

如果他输入像这样的东西,它不会

5的平方根是多少

5的平方根是多少

你知道5的平方根是多少吗

我需要能够确定数字出现在句子中的什么地方,然后从那里开始计算。注意,下面这行是一个更大的工作聊天机器人的一部分。在下面的一行中,我只是想回答任何平方根问题,不管数字出现在句子中的什么地方。我还知道,开放式输入框存在许多缺陷,人们可以在其中键入任何内容,如拼写错误等。这只是为了娱乐,不是一个严肃的科学项目。:)

if(
(单词[0]=“是什么”)&&
(单词[1]=“the”)&&
(字[2]=“正方形”)&&
(字[3]=“根”)&&
(单词[4]=“of”)&&
(input.search(/\d{1,10}/)!=-1)&&
(单词数=6)
){        
变量根=单词[5];

如果(root,则可以使用正则表达式执行此操作

"What is the sqrt of 5?".match(/\d+/g);
["5"]
输出是一个数组,包含在字符串中找到的所有数字。如果有多个数字,如“100的平方根是10吗?”则为

"Is the square root of 100 10?".match(/\d+/g);
["100", "10"]

因此,您可以选择要在脚本中使用的数字。

您需要使用正则表达式,如果您不知道它们是什么,您应该查找它们,因为在这个响应中解释它们需要花费很长时间。下面是一个有用的JavaScript正则表达式网站

假设你知道正则表达式,你应该首先搜索数字并存储所有你发现的数字,如果没有找到数字,打印出一个错误信息。作为补充说明,你可以考虑如何寻找数学常数,如π或E。

nums = someString./\d+|pi|e/gi
下一部分将很难,但要归结为核心概念,您需要查找诸如“平方根”、“时间”或“加号”之类的关键词。您应该从左到右逐字执行此操作。例如,如果用户输入

What is 5 plus 3 minus 8?
您应该先检测加号再检测减号,如果输入了加号

What is 5 minus 3 plus 8?
你应该先检测负数,再检测正数

对于使用两个数字的操作,您需要取您找到的前两个数字,然后执行该操作,并用结果替换这两个数字。我尝试使用反向波兰符号。如果您不太了解我要做的事情,请查找它,如果不知道它是什么


我希望我正确理解了你的问题,并为找到解决方案提供了一些帮助,因为你提出的问题很难,但似乎很有趣。祝你好运。同时作为一个警告,我在回答中没有考虑操作顺序。

哇。你的娱乐水平确实很高。
“生命的意义是42吗?”-->6.48该代码将只提供原始问题所要求的数字。似乎电影先生已经有了处理此类问题的方法。我认为这一点可能不清楚。“如果声明”屏蔽所有不必要的信息。如果信息不存在,则If语句将不会触发。因此,我知道If语句中会有一个数字。我希望有类似var root=的东西,不管该数字是什么。然后对该数字执行简单计算,如sum=Math.sqrt(root);查看原始帖子,我知道单词[5]就是数字。但是如果措辞不同,数字可能是单词[3]单词[4]等。有没有办法搜索输入。找到数字的下落并相应地计算。是的,我的代码就是这样做的。Do
var numbersisnstring=“5的sqrt是多少?”匹配(/\d+/g)
然后在字符串中找到一个数字数组。然后
numbersisnstring[0]
给你第一个数字。谢谢,我现在明白你的意思了。@Pointy谢谢,我没有意识到w3schools可能有害,按照W3stools的建议将其更改为MDN站点。
What is 5 minus 3 plus 8?