Discord.js消息收集器过滤问题:如何匹配含额外字符的指定文本?
解决Discord.js消息收集器匹配含额外字符消息的问题
不需要手动写for循环,用数组的some()方法就能简洁实现需求,同时修正你代码里的小错误(msg.content是属性而非方法,不能加括号)。以下是几种实用方案:
方案1:匹配包含关键词的任意内容
只要消息里包含目标关键词(不管前后有什么额外字符)就通过过滤:
const answers = ["Rock", "Paper", "Scissors"]; const filter = msg => answers.some(answer => msg.content.includes(answer));
方案2:不区分大小写的匹配
如果想忽略大小写(比如用户发“scissors!!”也能识别),可以统一转成小写后判断:
const answers = ["Rock", "Paper", "Scissors"]; const filter = msg => { const lowerContent = msg.content.toLowerCase(); return answers.some(answer => lowerContent.includes(answer.toLowerCase())); };
方案3:匹配完整单词(避免误匹配类似“Rocky”的内容)
如果需要确保匹配的是完整的关键词(比如不想把“Rocky”当成“Rock”),可以用正则的单词边界:
const answers = ["Rock", "Paper", "Scissors"]; const filter = msg => answers.some(answer => new RegExp(`\\b${answer}\\b`, 'i').test(msg.content) );
这里的\\b代表单词边界,'i'标志用于忽略大小写,可根据需求移除。
为什么不用for循环?
some()方法本身就是在遍历数组,找到第一个满足条件的元素就会返回true,和手动写for循环的逻辑完全一致,但代码更简洁易读,没必要重复造轮子。
内容的提问来源于stack exchange,提问作者user874737
相关产品推荐
相关产品推荐

