有没有办法缩短我的js代码?

oknrviil  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(397)

出于好奇,我想知道是否有办法缩短这段代码。每个想法都被接受。
我正在努力使代码的字符尽可能小

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!禁止)或不禁止(b!禁令)。这就是为什么我要替换它。而且,前缀是​​作为一个变量,我把它作为一个常量来添加作为一个例子。
预期输出:命令:“ban”,内容:“@someuser用于破坏规则”,参数:['@someuser','for','breaking','the','rules']

dgjrabp2

dgjrabp21#

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! “命令”。
如果你还想得到 @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上的示例和说明

lokaqttq

lokaqttq2#

你可以这样做:

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/)
;
w1jd8yoj

w1jd8yoj3#

这个短吗

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/);

相关问题