【问题标题】:NodeJS, DiscordJS command arguments split by {}Node JS、Discord JS 命令参数由 {} 分割
【发布时间】:2019-10-09 14:50:10
【问题描述】:

快速提问

如果我正在执行如下命令

!add {gamename}{gamedescription}{gamestatus}

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

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

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

前缀是“!”

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

【问题讨论】:

    标签: node.js discord discord.js


    【解决方案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 循环,它遍历正则表达式中的每个匹配项,并将字符串从第一个捕获组推送到参数数组中。

    小而值得注意:
    . 不匹配换行符,因此将不包括在消息中分成多行的参数。为防止这种情况,您可以在使用正则表达式之前将任何换行符替换为空格。

    【讨论】:

      【解决方案2】:

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

      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})。

      【讨论】:

      • 所以即使游戏描述是很多文字也能工作?
      • 如果是带有空格和符号的文本,则子模式{([a-zA-Z]+)}需要根据您要允许的字符进行调整。可以多长时间?可以换行吗?
      • 这是一个游戏服务器的描述......上面显示的是命令格式。这就是命令的样子。
      • !add {R​​ektServers}{这是该死的世界上最好的服务器!}{正在运行}
      • 这就是为什么我要问是否有办法用 {} 分割,所以它知道参数在 {}
      猜你喜欢
      • 2021-12-20
      • 2021-04-02
      • 2021-12-13
      • 2021-03-20
      • 2019-05-02
      • 1970-01-01
      • 2021-03-11
      • 2017-08-31
      • 1970-01-01
      相关资源
      最近更新 更多