带有 RegEx 的 if 语句总是触发

if statement with RegExp alway triggering

我正在开发一个 twitch 机器人,我目前正在尝试让该机器人欢迎人们加入直播,问题是,其中一个表情是 "HeyGuys",单独输入这个表情会触发他因为同时存在 "hey" 和 "guys",所以我想使用正则表达式查看整个单词来解决这个问题,但现在,它每次都会触发!

代码如下:

var welcomed;
function checkWelcomeMsg(channel, msg, usr) {
    welcomed = false;
    for(var i = 0; i < welcome.length; i++) {
        if(new RegExp('\b' + welcome[i] + '\b') && !welcomed) {
            for(var i = 0; i < chatNames.length; i++) {
                if(new RegExp('\b' + chatNames[i] + '\b')) {
                    console.log(getRandomResponse(greetings)+usr.username+"!");
                    welcomed = true;
                    console.log(welcomed);
                    break;
                }
            }
        }
    }
}

这里是代码正在查看的数组:

//Welcome; Thanks; Goodbye syntaxes
var welcome = ["hi", "hey", "hello", "o/", "HeyGuys", ];
var chatNames = ["chat", "everybody", "people", "everyone", "guys"];

//Responses
var greetings = ["Hello ", "HeyGuys ", "Hey "];

代码会查看所有消息,从 "welcome" 和 "chatNames" 中选择一个单词,然后从 "greetings"

中随机选择一个答案

在 if 语句之后放置 console.log 每次我在聊天中输入内容时都会给我“\bhi\b”和“\bchat\b”

我不会使用正则表达式,因为您可以使用 Array.indexOf 方法

你的代码有很多问题,你应该简化逻辑。

你可以这样做

var emotes = ["HeyGuys", ];

function checkWelcomeMsg(channel, msg, usr){
    var welcomed = false;

    var usrMsg = msg.toLowerCase();
    // Split the msg 
    var words = usrMsg.split(" ");

    // check if the msg contains an emote
    for (var i = 0, len=words.length; i< len ; i++){
        if (emotes.indexOf(words[i]) > -1){
            welcomed = true;
            break;
        }
    }

    // If there is no emotes
    if (!welcomed){
        // check if the msg contains any of welcome words
        for ( i = 0, len=words.length; i < len ; i++){
            if (welcome.indexOf(words[i]) > -1){
                welcomed = true;
                break;
            }
        }

        // If not return
        if (!welcomed){
            return;
        }

        welcomed = false;
        // check if the msg contains any of the chatNames too
        for (i = 0; i < len ; i++){
            if (chatNames.indexOf(words[i]) > -1){
                welcomed = true;
                break;
            }
        }
    }

    if (welcomed){
        console.log(getRandomResponse(greetings)+usr.username+"!");
    }
}

由于它是针对 Twitch 机器人的,我无法测试此代码,因此您在使用此代码并进行测试时应谨慎。