Я пишу функцию, которую я бы использовал для обработки параметров с параметрами для использования позже в другом проекте.
Пример ввода будет похож на это:
foo bar --baz con str --w=1920 --h=1080
Из приведенного выше примера я ожидал foo
а также bar
не быть частью какого-либо флага и baz
будет содержать con
а также str
а также w
со значением 1920
а также h
с участием 1080
:
foo
bar
baz = [con, str]
w = 1920
h = 1080
Этот getFlags
функция принимает строку и выполняет логику «флага», которую я имел в виду.
const getFlags = (str) => {
const prefix = '--';
const strArray = str
.trim()
.replaceAll(/s+/ig, ' ')
.split(' ');
let flagArray = {
_noFlag: {
values: [],
},
};
let lastArg = '';
strArray.forEach((arg) => {
if (arg.startsWith(prefix) && arg.length > prefix.length) {
noPrefixFlag = arg.slice(prefix.length);
if (noPrefixFlag.includes('=')) {
const pair = noPrefixFlag.split('=');
flagArray[pair[0]] = {
values: [pair[1]],
};
lastArg = '';
} else {
lastArg = noPrefixFlag;
flagArray[lastArg] = {
values: [],
};
}
} else if (lastArg) {
flagArray[lastArg].values.push(arg);
} else {
flagArray._noFlag.values.push(arg);
}
});
return flagArray;
};
Он работает так, как я ожидал, но я чувствую, что эту функцию можно улучшить.