【发布时间】:2023-03-25 07:23:01
【问题描述】:
我正在开发一个简单的聊天机器人,但在使用 .replace 转义特殊字符时遇到了一些问题 - 我可能遗漏了明显的内容,但下面的代码不起作用,我不知道为什么。有什么想法吗?
为了澄清,这段代码可以工作,并且可以在没有 .replace 行的情况下执行我希望它执行的操作,但如果用户键入,我需要它吗?要么 !等等都无所谓。
var know = {
<!--General Phrases-->
"Hi": "Hello! 👋",
"Hey": "Hello! 👋",
"Hello":"Hello 👋 How can I help?",
"how are you":"Not bad, thanks!",
"Bye":"Have a nice day!",
"Goodbye":"See you later!",
<!--Directory-->
"Help": `You can find help by searching below or by clicking <a href='https://www.page.com/news' target="_blank">here</a>`,
"contact": `You can contact us by clicking <a href='https://www.page.com/contact' target="_blank">here</a>`,
"About": `You can find our About Us page by clicking <a href='https://www.page.com/about' target="_blank">here</a>`
};
function goo() {
var userBox = document.getElementById('userBox');
var userInput = userBox.value;
var chatLog = document.getElementById('chatLog');
var chatLogContent = "";
if (!userInput) {
chatLogContent = ''
}
var hasKeyword = false;
for (var key in know) {
if (userInput.toLowerCase().replace(/[.,\/#!$%\^&\*;:{}=\-_`~ ()]/g,"").match(new RegExp('(^|\\s)'+key.toLowerCase()+'(\\s|$)'))) {{
hasKeyword = true;
break;
} else {
hasKeyword = false;
}
}
if (hasKeyword) {
chatLogContent += know[key] + "<br>"; //or use know.key
} else {
chatLogContent += "No results found. Please enter another search term below.<br>";
}
var server = document.createElement('div');
server.setAttribute('class', 'server');
server.innerHTML = chatLogContent;
document.getElementById('chatLog').innerHTML = '';
chatLog.appendChild(server);
}
更新:这个问题已经解决了。请参阅 Wiktor Stribiżew 在 cmets 中的回答。
【问题讨论】:
-
@Wiktor Stribiżew 感谢您的帮助,基本上,如果用户键入“你好吗?”,我想要它。它将与他们关键的“你好吗”的答案相同 - 我想我需要从这两个值中删除它们?
-
@Wiktor Stribiżew 然后我会打电话给 escapeRegex();以上 hasKeyword = true; ?
-
@Wiktor Stribiżew 我最初是通过拆分它来做到这一点的,但正则表达式似乎更好。这是我以前的代码 - if (userInput.toLowerCase() .replace(/[.,\/#!$%\^&*;:{}=\-_`~ ()]/g,"") 。 split(/\s+/) .includes(key.toLowerCase())) 这有效,但找不到多个单词并在“high”等中选择“hi”。
-
然后按照我在顶部评论中提到的那样做,也将它们从
key.toLowerCase()中删除。将key.toLowerCase()替换为key.toLowerCase().replace(/[.,\/#!$%^&*;:{}=\-_`~()]/g,"")。啊,删除空格,我认为您不想删除空格,因为您需要识别多个单词。两个替换必须看起来像.replace(/[.,\/#!$%^&*;:{}=\-_`~()]/g,"")。如果您需要添加反斜杠,请将其加倍,.replace(/[.,\/#!$%^&*;:{}=\-_`~()\\]/g,"") -
@WiktorStribiżew 非常感谢,它现在可以正常工作了! :) 非常感谢您的耐心和帮助。
标签: javascript regex replace escaping