两种差异切片的两种差异

时间:2019-06-22 20:02:21

标签: javascript node.js discord.js

我制作了一个画布Discord机器人,并且想要执行以下命令: .igor arg1|arg2|arg3。现在,如您所见,只有命令由一个简单的空格分隔,而args由一个竖线分隔。

我首先要做的是:

let args = message.content.slice(cfg.prefix.length).trim().split(/\|+/g)

这是我的代码:

client.on("message", function (message) {
if (!message.content.startsWith(cfg.prefix) || message.author.bot) return;
let args = message.content.slice(cfg.prefix.length).trim().split(/+\|+/g)
let command = args.shift().toLowerCase();
  if (command === "igor") {
    console.log(`test: args: ${args} commande: ${command}`);
  }
})

看到控制台日志行吗?我希望我的控制台在键入命令test: args: arg1,arg2,arg3 commande: igor时打印.igor arg1|arg2|arg3。如果我用实际代码键入此命令,那么控制台上绝对没有任何显示。但是,如果我输入如下命令:.igor|arg1|arg2|arg3,则控制台会打印我想要的东西。但是,我不想这样键入命令。谁想要键入这样的命令?

我需要放另一个切片并拆分。但是在哪里,如何?我真的需要再切成薄片然后拆分吗?我不知道了。

1 个答案:

答案 0 :(得分:0)

由于Titus,我找到了解决问题的方法:这是我的正则表达式。 这是我的旧正则表达式:/+\|+/g,这是我的新正则表达式:/\s|\|/g 此正则表达式检测空格和|。现在,如果我键入以下内容:.igor arg1|arg2|arg3,控制台将显示以下内容:test: args: arg1,arg2,arg3 commande: igor,这就是我想要的。

但是,如果我这样输入命令:.igor arg1 | arg2 | arg3,该怎么办?我的控制台将打印以下内容:test: args: arg1,,,arg2,,,arg3 commande: igor。该机器人认为空格是参数。

解决方案非常简单。我需要做的就是在变量的末尾添加.filter(Boolean)let args = message.content.slice(cfg.prefix.length).trim().split(/\s|\|/g).filter(Boolean)。 现在,即使我在参数之间放置了数百万个空格,我的控制台也会打印以下内容:test: args: arg1,arg2,arg3 commande: igor

编码愉快!