Javascript / jQuery检查字符串是否包含一个或多个可选单词

时间:2016-03-19 12:48:37

标签: javascript jquery arrays string search

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

我正在创建一个聊天机器人。因此,每当真正的人类用户键入消息时,我想要检测用户在消息中键入哪些单词,然后根据他/她的单词,机器人将特别回复。

 // 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

E.g输出我的代码: 实例1:    网友:您好!    Bot:嘿!!

实例2:    用户:Morning Fellow    机器人:您好:)

我只是想检测用户消息的语义含义,然后根据用户从我的数组中说出来回复。

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

我在想我需要Reg ex来匹配这样的事件或String包含函数吗?任何基本的编码示例都将非常感激。

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

2 个答案:

答案 0 :(得分:2)

您是否尝试过使用indexOf?如果你试图在字符串或数组上搜索特定的文本/字符串,它就像.contains()。它基本上检查您要检查的字符串的索引。然后你只需要添加某种条件来使语句成立。

  

添加> -1

从逻辑上讲,如果找不到string,它将返回false语句;如果找到string则返回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
}

P.S。我不能写评论,因为我还没有太多的声誉。 :)

答案 1 :(得分:1)

你现在可以使用正则表达式。看起来并不那么复杂。例如,你使用这个:

//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!")
}

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