You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:05:22