1

I need to check if there is a phrase or a word within a certain string. However, the word can't be within another word. For example, if the string is "Hi, how are you? This is really cool, by the way." If I'm looking for the word "hi", it should only show up once- the one inside the "this" shouldn't be counted. The "how are you" should also be counted since that is a phrase I'm looking for. Below is my code. Essentially, I have an array of arrays with phrases that I'm looking for. I have a += because if the string says "Hi, how are you?" for example, I want to respond to both the "hi" and "how are you." I think I might have to use regular expressions, but I'm not really sure how I would go about doing so. Any guidance would be much appreciated. Thank you so much!

for(let a = 0; a < userquestions.length; a++) {
    for (let b = 0; b < userquestions[a].length; b++) {
        if(usermessage.includes(userquestions[a][b])) {
            responsemessage += chatbotresponses[a][Math.floor(Math.random() * chatbotresponses[a].length)];
        }
    }
}
Wiktor Stribiżew
  • 607,720
  • 39
  • 448
  • 563
Pratyush
  • 108
  • 8

1 Answers1

2

You should use regex, indeed.

Try this:

function escapeRegExp(string) {
    return string.replace(/([.*+?^=!:${}()|[]\/\])/g, "\\$1");
}

function searchWholeWord(wholeWord, hostString)
{
    var regex = '\\b';
    regex += escapeRegExp(wholeWord);
    regex += '\\b';
    var result = new RegExp(regex, 'i').test(hostString);
    return result
}

found = searchWholeWord("hi", "Hi, how are you? This is really cool, by the way.");
alert(found);
//returns true

found = searchWholeWord("hi", "This is really cool, by the way.");
alert(found);
//returns false

http://jsfiddle.net/Ydr3R/

Based on this post: Search for a whole word in a string

  • Hello, this seems to work nicely. However, I have an issue- here is my code: http://jsfiddle.net/d7fLn3qs/. If the chatbot(responsemessage) is inside the loop, it works properly. When it's outside the loop, though, it seems like the value of responsemessage can't be figured out. It needs to be outside the loop, by the way. Let me know if you need any more information. Thanks! – Pratyush Aug 05 '22 at 16:34
  • It would be nice to have the full code where you are calling this function to see where the problem might reside. Anyway, I think your original question was answered, so I think you should upvote and mark as solved if that's the case. – José Manuel Benetti Aug 06 '22 at 02:31
  • Okay, I'll figure it out. Thanks! – Pratyush Aug 06 '22 at 19:25