Итак, я хочу создать команду бота для разногласий с помощью node.js, где заданы некоторые параметры. Основная идея заключается в использовании такой команды
/item create name:"Test Item" price:0 stock:infinite
Теперь мне нужно разделить строку, чтобы можно было прикрепить каждое значение. Это легко для
price:0
и
stock:infinite
Но при разделении
name:"Test Item"
он будет разделен на
name:"Test
и
Item"
Могу ли я как-то игнорировать пробел-разделитель между двумя кавычками, чтобы
name"Test Item"
останется прежним. В противном случае, какой метод можно было бы эффективно использовать для склеивания переменных внутри кавычек?





Вы можете сделать это с помощью Обычные выражения, и это выглядит так
const str = '/item create name:"Test Item" price:0 stock:infinite';
const rgx = /\w+:(\".+\"|\w+)/g;
const matches = str.match(rgx);
console.info(matches);@TheRaspbian Я не уверен, что понимаю. console.info(matches[0]) дает только name:"Test Item". Это точно соответствует тому, что задано в вашем вопросе. Есть ли другие критерии, которые не включены?
Нет, это работает нормально, если есть только один параметр, где вы используете кавычки, все в порядке. Но если вы используете два или более параметров с кавычками, все, что находится между первым «параметром-кавычкой» и последним, включая их, считается за один. Итак, name:"Test" desc:"Description" shop:true даст мне name:"Test" desc:"Description" в качестве одного параметра, а shop:true - в качестве другого. при переключении параметров на name:"Test" shop:true desc:"Description" тогда shop:true находится между параметрами цитаты и считается одним параметром: name:"Test" shop:true desc:"Description"
Это ваш фрагмент кода, но отредактированный, поэтому последним параметром является desc:"Это тест". поэтому «цена: 0 запас: бесконечный» добавляется к первому параметру, что я хочу предотвратить
const str = '/item create name:"Test Item" price:0 stock:infinite desc:"This is a test"';
const rgx = /\w+:(\".+\"|\w+)/g;
const matches = str.match(rgx);
console.info(matches);
Что ж, я попробовал, и он действительно делает то, что мне нужно, но все, что следует за этими кавычками, включается как одна строка. Например, я сделал Console.log(matches[0]); Если есть что-то еще с кавычками, он дает мне имя: "Тестовый элемент" цена: 0 шток: бесконечное описание: "Тестирование этой команды" назад, для команды /item создать имя: "Тестовый элемент" цена: 0 шток: бесконечное desc:"Тестирование этой команды", так как она видит все как один параметр