带有 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 机器人的,我无法测试此代码,因此您在使用此代码并进行测试时应谨慎。
我正在开发一个 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 机器人的,我无法测试此代码,因此您在使用此代码并进行测试时应谨慎。