Discord.js拉取消息时如何实现关键词大小写不敏感匹配
Discord.js 消息关键词大小写不敏感匹配方案
原代码的大小写敏感问题来自String.includes()本身的严格匹配特性,.toLowerCase()是所有JavaScript字符串的原生方法,不存在“仅能用于指令处理场景”的使用限制——拉取到的消息对象的content属性本身就是标准字符串类型,可直接调用所有字符串实例方法。
实现思路
把待匹配的关键词、待检测的消息内容统一转换为全小写(或全大写)格式后再做包含判断,即可完全消除大小写差异带来的匹配误差。
修正后代码
banlist.messages.fetch({limit : 30}).then(messages => { // 循环外提前转换关键词格式,避免重复计算损耗性能 const targetKeyword = check.toLowerCase() const positive = messages.some(msgs => { return msgs.content.toLowerCase().includes(targetKeyword) }) if (!positive) { // 未匹配到关键词的业务逻辑 // ... } else { // 匹配到关键词的业务逻辑 // ... } })
进阶拓展(可选)
如果需要实现更严谨的匹配规则,比如整词匹配、避免关键词被其他长单词误命中,可以用带i(大小写不敏感)标识的正则实现:
// 转义关键词中的正则特殊字符,避免语法错误 const escapeRegExp = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // 构造大小写不敏感的整词匹配正则 const keywordReg = new RegExp(`\\b${escapeRegExp(check)}\\b`, 'i') const positive = messages.some(msgs => keywordReg.test(msgs.content))
内容的提问来源于stack exchange,提问作者DerZm3zl
相关产品推荐
相关产品推荐

