【问题标题】:Split parts of string to variables or into array将部分字符串拆分为变量或数组
【发布时间】:2021-07-11 14:48:36
【问题描述】:

出于好奇,我想知道是否有办法缩短此代码。每个想法都被接受。

  • 我正在尝试使代码的字符尽可能小
const prefix = 'b!',
command = me.content.replace(RegExp(prefix + '\\s'), prefix)
 .slice(prefix.length).split(/\s/)[0],
content = me.content.replace(RegExp(prefix + '\\s'), prefix)
 .slice(prefix.length + command.length).trim(),
args = content.split(/\s/);

me.content.replace(RegExp(prefix + '\s'), prefix) 在我的代码中重复,有没有办法在不创建另一个变量的情况下缩短它?

输入: 'b!禁止 @SomeUser 违反规则'

  • 前缀和命令之间可能有一个或多个空格(b!Ban)或没有(b!Ban)。这就是我更换它的原因。还有,前缀是一个变量,我作为常量添加了作为例子。

预期输出: 命令:“禁止”, content: '@SomeUser 违反规则', args: ['@SomeUser', 'for', 'break', 'the', 'rules' ]

【问题讨论】:

  • 为什么?你想要一个更小的字符代码吗?为什么不创建一个变量来重用重复的代码?
  • 您能提供一个输入字符串和所需的输出吗?
  • 与其专注于让你的代码更短,你应该考虑不要重复自己,这样可以让你的代码更短。
  • 我只是不明白您为什么尝试用b! 替换b!\\s,但无论如何它并没有用于您的任何字符串结果 - 大惊小怪没有任何收获。您能否重新表述一下您的任务是什么?
  • 是的,你可以让你的变量每个/s只有一个字符

标签: javascript slice


【解决方案1】:

const str = "b! ban @SomeUser for breaking the rules";
const [m, cmd, cont] = str.match(/^b!\s+(\S+)\s+(.+)/);


console.log(cmd);
console.log(cont);
// console.log(cont.split(/\s+/))

Regex101.com上的示例和说明
PS,按空格分割时,使用/\s+/将连续的空格视为一个。
上面给出了你的字符串总是以^ 开头的b! “command”。

如果您还想获得@user:

const str = "b! ban @SomeUser for breaking the rules";
const [m, cmd, user, reason] = str.match(/^b!\s+(\S+)\s+(@\S+)\s+(.+)/);

console.log(cmd);
console.log(user);
console.log(reason);

Regex101.com上的示例和说明

【讨论】:

    【解决方案2】:

    你可以这样做:

    const 
      myfunc  = ( prefix, adding) => me.content.replace(RegExp(prefix + '\\s'), prefix).slice(prefix.length +adding)  
    , command = myfunc('b!',0).split(/\s/)[0]
    , content = myfunc('b!', command.length).trim()
    , args    = content.split(/\s/)
    ;
    

    【讨论】:

      【解决方案3】:

      这是不是更短:

      const prefix = 'b!',
        [command, content] = (_ => {
          return ([
            _.slice(prefix.length).split(/\s/)[0],
            _.slice(prefix.length + command.length).trim()
          ]);
        })(me.content.replace(RegExp(prefix + '\\s'), prefix)),
        args = content.split(/\s/);
      

      【讨论】:

        猜你喜欢
        • 2015-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        相关资源
        最近更新 更多