首页 > 解决方案 > 两个不同切片的两个不同分割

问题描述

我制作了一个画布 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,控制台会打印出我想要的东西。但是,我不想那样输入我的命令。谁想输入这样的命令?

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

标签: javascriptnode.jsdiscord.js

解决方案


感谢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,即使我在我的 args 之间放置了数百万个空格。

快乐编码!


推荐阅读