首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字符串中搜索数字

在字符串中搜索数字
EN

Stack Overflow用户
提问于 2012-06-08 07:45:17
回答 2查看 740关注 0票数 5

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

5的平方根是多少?这行得通。

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

5的平方根是多少

5的平方根是什么?

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

我需要能够确定数字在句子中出现的位置,然后从那里进行计算。注意下面这行代码是一个更大的聊天机器人的一部分。在下面这行中,我只是试图回答任何平方根问题,而不管数字在句子中出现在哪里。我也知道开放式输入框有很多缺陷,人们可以在其中输入任何东西,比如拼写错误等等。这只是为了娱乐,而不是一个严肃的科学项目。:)

代码语言:javascript
复制
if(
    (word[0]=="what's") &&
    (word[1]=="the") &&
    (word[2]=="square") &&
    (word[3]=="root") &&
    (word [4]=="of") &&
    (input.search(/\d{1,10}/)!=-1) &&
    (num_of_words==6)
){        
    var root= word[5];
    if(root<0){ 
        document.result.result.value = "The square root of a negative number is not possible.";
    }else{
         word[5] = Math.sqrt(root);
         word[5] = Math.round(word[5]*100)/100 
         document.result.result.value = "The square root of "+ root +" is "+ word[5] +"."; 
    }
    return true;
}

为了清楚起见,机器人是使用"If statemments“编写的,这是有原因的。如果本例中的输入不包括单词"what“、”平方根“和"some number”,则该行不会触发,并由机器人进一步向下返回通用的“我不知道响应类型”。所以我希望任何答案都能适合我正在使用的格式。客气点,我是新来的。我喜欢制作机器人,但我不是一个很好的程序员。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-08 07:53:00

您可以使用正则表达式来完成此操作。

代码语言:javascript
复制
"What is the sqrt of 5?".match(/\d+/g);
["5"]

输出是一个包含在字符串中找到的所有数字的数组。如果你有多个,比如“100的平方根是10吗?”那么它将会是

代码语言:javascript
复制
"Is the square root of 100 10?".match(/\d+/g);
["100", "10"]

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

票数 2
EN

Stack Overflow用户

发布于 2012-06-08 17:28:42

您将需要使用正则表达式,如果您不知道它们是什么,您应该查找它们,因为在此响应中解释它们将花费太长时间。这是一个在JavaScript https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions中使用正则表达式的有用网站。

假设您知道正则表达式,您应该首先搜索数字并存储您找到的所有数字,如果找不到数字,则打印出一条错误消息。作为补充说明,您可能会考虑搜索数学常量,例如pi或e。

代码语言:javascript
复制
nums = someString./\d+|pi|e/gi

接下来的部分会很难,但要将其归结为核心概念,你需要寻找诸如“平方根”、“乘以”或“加”之类的关键词。你应该从左到右逐个单词地做这个。例如,如果用户输入

代码语言:javascript
复制
What is 5 plus 3 minus 8?

您应该先检测加号,然后再检测减号,而如果输入的是

代码语言:javascript
复制
What is 5 minus 3 plus 8?

你应该在检测正数之前先检测负数。

对于使用两个数字的操作,您需要获取找到的前两个数字,然后执行该操作,并将这两个数字替换为结果。我正在尝试使用反向波兰符号,如果你不太明白我试图做什么,如果不知道它是什么,可以查一下。

我希望我正确理解了你的问题,并为解决方案提供了一些帮助,因为你问的问题很难,但似乎很有趣。祝好运。另外,作为警告,我在回应时不会考虑操作顺序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10941370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档