快速提问
如果我正在执行以下命令
!add {gamename}{gamedescription}{gamestatus}
我怎么知道每个参数都在{}
内
我知道实际的命令是我的第一个参数
let args = message.content.substring(PREFIX.length).split(" ");
switch(args[0]) {
case 'status':
PREFIX是'!'
不确定我如何设置参数1的第一个字符串在第一个{}
内,依此类推。
答案 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}
)。