Javascript/jQuery 检查字符串是不是包含一个单词或出现的可选单词之一

Posted

技术标签:

【中文标题】Javascript/jQuery 检查字符串是不是包含一个单词或出现的可选单词之一【英文标题】: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 回复的任何内容。

【问题讨论】:

github.com/modInfo/Eliza.js-chatbot-in-NodeJS 如何将 Eliza Bot 集成到我的 socket.io 应用程序代码中?有什么帮助吗? 【参考方案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!")

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

【讨论】:

以上是关于Javascript/jQuery 检查字符串是不是包含一个单词或出现的可选单词之一的主要内容,如果未能解决你的问题,请参考以下文章

Javascript/Jquery-如何检查函数是不是返回任何值?

Javascript / jQuery:如何检查日期是不是是一个月的最后一天

Jquery,检查数组中是不是存在值[重复]

检查文件是不是存在于javascript中?

如何在 JavaScript/jQuery 中查找数组是不是包含特定字符串?

使用 javascript/jquery 检测 Asp.Net 表单是不是有效