javascript - 两个不同切片的两个不同分割
问题描述
我制作了一个画布 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
,控制台会打印出我想要的东西。但是,我不想那样输入我的命令。谁想输入这样的命令?
我需要再放一个切片并拆分。但是在哪里,如何?我真的需要再放一个切片并拆分吗?我不知道了。
解决方案
感谢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 之间放置了数百万个空格。
快乐编码!
推荐阅读
- python - 如何将 tf-js 转换为 tensorflow pb 模型
- python - Python Regex - 获取以部分单词开头并以某个字符结尾的子字符串
- c# - 使用 mongodb.driver 2.10.3 连接到 mongodb 服务器时出错
- javascript - 表单验证逻辑问题(使用 React useState Hook)
- javascript - 是否在以下 JavaScript 代码中创建了闭包?
- c# - 无法调试 Azure EventHub 函数
- firebase - 为什么 Cloud Firestore 集合至少需要一个文档?
- javascript - 在浏览器 JavaScript 中,将 csv 文本写入剪贴板时收到错误消息
- python - specutils fit_generic_continuum 在 Spectrum1D 上使用时给出 TypeError
- google-cloud-platform - 如何更改谷歌云 SQL 的时区?