【问题标题】:message.content.includes not working on this codemessage.content.includes 不适用于此代码
【发布时间】:2021-05-04 15:01:48
【问题描述】:

我正在尝试检查消息是否包含某个单词。现在,我知道它是 message.content.includes,但我的有点不同,它不起作用。

代码如下:

client.on('message', (message) => {
  // Right here is where it's not working. If I remove the includes part,
  // it can detect the word if it's by its self. But if I'm saying
  // something like "Hahaha Heck" it won't see it.
  if (/^H[A-Za-z]{2}k$/.test(message.content.includes)) {
    message.delete();
    message.reply('Okay');
    message.member.roles.add('805088740737417256');
  }
});

有人知道解决办法吗?

(如果您想知道 /^H[A-Za-z]{2}k$/ 部分是什么正则表达式模式,它会查找与 2 个字母 H 和 k 之间的任何内容匹配的任何单词。)

【问题讨论】:

  • 请提供示例输入字符串以及每个字符串的预期输出。
  • 输入:“哎呀!我不小心撞到了我的桌子”输出:(来自机器人)“好的”。 (哎呀是可以与 H 作为起始字母和 K 一起使用的单词之一。)在那条消息中,我希望它仍然能够检测到“哎呀”这个词,尽管它不是单独的,它不起作用这些代码出于某种原因。

标签: javascript node.js regex discord.js


【解决方案1】:

使用单词边界而不是 ^&。这两个从字符串的开头一直搜索到结尾。另一方面,单词边界将搜索每个单独的“单词”。

如果你想找到所有这些,你需要使用贪婪标志和.matchAll()

const strs = [
"Heck! I hit my table on accident",
"What the Heck",
"Hank is not Heckle, but Hank Heck is cool"
];

const regex = /\bH\w{2}k\b/;
strs.forEach(s=>console.log(s.match(regex)));

【讨论】:

    【解决方案2】:

    message.content 是一个字符串,includes 方法实际上是 String.includes,这是一种内置的 JavaScript 方法,用于检查一个字符串是否可以在另一个字符串中找到。您不能使用正则表达式作为搜索字符串。

    如果您想使用正则表达式检查字符串,您可以使用RegExp.testString.match method。如果匹配,RegExp.test 将返回 true,否则返回 false。如果你使用String.match,如果有匹配则返回一个数组,否则返回null

    作为Randy Casburn mentioned,您的正则表达式不起作用,因为/^H[A-Za-z]{2}k$/ 检查字符串是否以H 开头并以k 结尾。您可以改用单词边界。单词边界\b 匹配一侧是单词字符的位置。尝试用\b 替换^$ 锚点,它会起作用:/\bH\w{2}k\b/

    查看下面的工作示例:

    使用.test()

    client.on('message', (message) => {
      if (message.author.bot) return;
    
      if (/\bH\w{2}k\b/.test(message.content)) {
        message.delete();
        message.reply('Okay');
        message.member.roles.add('805088740737417256');
      }
    });
    

    使用.match()

    client.on('message', (message) => {
      if (message.author.bot) return;
    
      if (message.content.match(/\bH\w{2}k\b/) !== null) {
        message.delete();
        message.reply('Okay');
        message.member.roles.add('805088740737417256');
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多