【问题标题】:Javascript/jQuery check if string contains a word or occurrences of one of the optional wordsJavascript/jQuery 检查字符串是否包含一个单词或出现的可选单词之一
【发布时间】:2016-07-06 05:51:37
【问题描述】:

我有一个简单的基本问题,我不知道应该采取哪种方法。

我正在创建一个聊天机器人。所以每次真正的人类用户输入消息时,我想检测用户在消息中输入的单词,然后根据他/她的单词,机器人会特别回复。

 // A string containing user message
        var UserMsg = data.message;
////Means if ANY ONE of this words are contained in user message then I will tell the bot to respond to the greeting message.
    if UserMsg.contains("Hi", "Hello", "Hey", "Morning"); 

    var welcomeArray = ['Hey!!', 'Hi', 'Hello :)']; 

 //gets a random welcome msg to respond
      var welcomeMsg = welcomeArray[Math.floor(Math.random() * welcomeArray.length)];


      if(data.message=='Hi') //if user says Hi or hello hey etc
       socket.emit('message', 'welcomeMsg'); //Bot will respond by one of the random greetings messages

例如我的代码的输出: 实例 1: 用户:您好! 机器人:嘿!!

实例 2: 用户:早安同学 机器人:你好 :)

我只想检测用户消息的语义,然后根据用户从我的数组中所说的内容进行回复。

就像当用户说“再见”或“保重”等其中任何一个时,我的机器人应该理解用户想要去然后机器人应该说“保重:)”

我想我需要 Reg ex 来匹配此类事件或字符串包含函数?任何基本的编码示例都将不胜感激。

或者,我可以在 NodeJS 中使用像 Eliza Bot DB 这样的 AIML,而不是自己手动响应,这样我就可以将它包含在我的代码中并将用户消息发送给 Eliza Bot然后回复 Eliza Bot 回复的任何内容。

【问题讨论】:

标签: javascript jquery arrays string search


【解决方案1】:

您是否尝试过使用 indexOf ?如果您尝试在字符串或数组上搜索特定文本/字符串,它的工作方式类似于 .contains()。它基本上检查您要检查的字符串的索引。然后你只需要添加某种条件来使语句为真。

通过添加 > -1

从逻辑上讲,如果未找到字符串,它将返回错误语句,如果找到字符串,则返回 true,因为它将返回其索引。并且索引从 0 开始。

尝试检查一下,

var data = {
   message1 : 'Hi there', message2 : 'Hello there', message3 : 'Hey bot',message4 : 'Good Morning'
}

var userMsg = data;

if (userMsg.message1.indexOf('Hi') > -1) {
   //Do something
}

if (userMsg.message2.indexOf('Hello') > -1) {
   //Do something
}
if (userMsg.message3.indexOf('Hey') > -1) {
   //Do something
}

if (userMsg.message4.indexOf('Morning') > -1) {
   //Do something
}

附:由于我还没有太大的声誉,所以我无法发表评论。 :)

【讨论】:

  • 谢谢,但是有没有办法将所有这些条件写在一行中。我的意思是,如果用户字符串包含 Hi 或 hello,或者 hey,它们都表示相同的意思,所以我只希望一个代码块基于此.. 而不是做多件事。我只想要一个如果对所有这些情况都是正确的。
【解决方案2】:

您现在可以使用正则表达式。好像没那么复杂。例如你使用这个:

//Use your array here with a regex with your own logic.
var myRegExp = /Hello/;

var userText = "Hello my friend";
if(myRegExp.test(userText))
{
    console.log("Found a Hello!")
}

这是一个基本示例,您可以使用自己的逻辑进行扩展或编写一个单词字典来匹配。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 2012-03-26
    • 2017-09-09
    • 2014-01-25
    • 2011-11-08
    • 2011-07-20
    • 2012-05-20
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多