如何在JavaScript开发的聊天机器人中正确使用.includes匹配用户提问关键词
问题原因
- 你对
.includes()方法的调用逻辑完全错误:document.getElementById.includes('chatLog')是错误写法,.includes()是字符串原型上的方法,只能用于检测字符串是否包含指定子串,不能挂载在document.getElementById上调用 - 原有判断逻辑
if (user in know)是完全匹配用户输入和知识库的键,无法实现包含关键词就匹配的需求
修复方案
调整匹配逻辑:遍历知识库的所有关键词,校验用户输入是否包含对应关键词,匹配到就返回对应回复,否则返回无法理解。你可以参考以下修正后的完整代码:
function talk() { var know = { "Hey": "Hello!", "Help": `You can find help by clicking <a href='https://addressname.com' target="_blank">here</a>` }; // 获取用户输入,统一转小写实现大小写不敏感匹配,不需要该特性可以去掉toLowerCase() var user = document.getElementById('userBox').value.toLowerCase(); var chatLog = document.getElementById('chatLog'); // 先输出用户输入 chatLog.innerHTML = user + "<br>"; // 遍历知识库匹配关键词 let reply = "I do not understand."; for (let keyword in know) { // 检测用户输入是否包含当前关键词,关键词也转小写做兼容 if (user.includes(keyword.toLowerCase())) { reply = know[keyword] + "<br>"; // 匹配到就跳出循环,不需要继续检测 break; } } // 输出回复 chatLog.innerHTML += reply; }
调整说明
- 把
includes()用在用户输入的字符串user上,正确实现子串检测逻辑 - 新增关键词遍历逻辑,只要用户输入包含任意知识库的关键词就返回对应回复
- 新增大小写兼容处理,用户输入
help、HELP、Can you help都能正常匹配到Help对应的回复
内容的提问来源于stack exchange,提问作者user1300788
相关产品推荐
相关产品推荐

