NodeJS,DiscordJS命令参数由{}分隔

时间:2019-05-23 04:54:29

标签: node.js discord discord.js

快速提问

如果我正在执行以下命令

!add {gamename}{gamedescription}{gamestatus}

我怎么知道每个参数都在{}

我知道实际的命令是我的第一个参数

 let args = message.content.substring(PREFIX.length).split(" ");
 switch(args[0]) {
    case 'status':

PREFIX是'!'

不确定我如何设置参数1的第一个字符串在第一个{}内,依此类推。

2 个答案:

答案 0 :(得分:1)

这个正则表达式可以解决问题。在下面进行测试。

const regex = /{(.+?)}/g;
const string = '!add {game}{game description}{game status}';

const args = [];

let match;
while (match = regex.exec(string)) args.push(match[1]);

console.log(args);

说明:
要查看正则表达式如何工作以及每个字符的作用,请查看here。关于while循环,它会循环遍历正则表达式中的每个匹配项,并将来自第一个捕获组的字符串推入arguments数组。

小巧但值得一提:
.与换行符不匹配,因此在消息中分成多行的参数将不包括在内。为避免这种情况,可以在使用正则表达式之前用空格替换任何换行符。

答案 1 :(得分:0)

您可以使用正则表达式捕获模式中的子字符串。

const message = {
  content: '!add {gamename}{gamedescription}{gamestatus}'
};

const matches = message.content.match(/^!([a-zA-Z]+) {([a-zA-Z]+)}{([a-zA-Z]+)}{([a-zA-Z]+)}/);
if (matches) {
  console.log(matches[1]); // add
  console.log(matches[2]); // gamename
  console.log(matches[3]); // gamedescription
  console.log(matches[4]); // gamestatus
}

当字符串与模式匹配时,matches对象的子字符串在()matches[1]matches[2]matches[3]中被matches[4]包围。 matches[0]具有整个匹配的字符串(在这种情况下为!add {gamename}{gamedescription}{gamestatus})。