我正在尝试为 Discord 机器人创建一个命令解析器,以便在收到消息时使用,但我在处理嵌套引号时遇到问题。我已经做到了,它可以解析带有双引号和标志的字符串,但它不处理嵌套引号。
处理双引号。
处理嵌套双引号。
处理标志(可以位于 后的任何位置!command)。
没有指定值的标志默认值为true/ 1。
例如,以下字符串:
!command that --can "handle double" quotes "and \"nested double\" quotes" --as --well=as --flags="with values"
...应该产生以下参数:command、that、handle double、quotes和and "nested double" quotes以下标志:"can": true、"as": true、"well": "as"、"flags": "with values"。
// splits up the string into separate arguments and flags
const parts = content.slice(1).trim().match(/(--\w+=)?"[^"]*"|[^ "]+/g)
.map(arg => arg.replace(/^"(.*)"$/, '$1'));
// separates the arguments and flags
const [ args, flags ] = parts.reduce((parts, part) => {
// check if flag or argument
if (part.startsWith('--')) {
// check if has a specified value or not
if (part.includes('=')) {
// parses the specified value
part = part.split('=');
const value = part.slice(1)[0];
parts[1][part[0].slice(2)] = value.replace(/^"(.*)"$/, '$1');
} else {
parts[1][part.slice(2)] = true;
}
} else {
parts[0].push(part);
}
return parts;
}, [[], {}]);
当前解析为以下参数:、command、that、handle double、quotes、and \、nested和以下标志:、、、。double\ quotes"can": true"as": true"well": "as""flags": "with values"
jeck猫
宝慕林4294392
随时随地看视频慕课网APP
相关分类