#javascript #node.js #regex #discord #discord.js
#javascript #node.js #регулярное выражение #Discord #discord.js
Вопрос:
В настоящее время я пишу discord-бота и пытаюсь создать команду, которая заменяет строку на все, что вы пишете. Он делает это, находя то, что находится в кавычках, и извлекая это. Проблема в том, что, похоже, оно принимает сообщение в кавычках и сообщение без кавычек, а затем помещает их оба.
Команды написаны следующим образом…
!setmoogie title «название фильма»
Вот мой код:
let moogieTitle = "To Be Announced...";
let moogieDescription = "";
let moogieTime = "Friday at 8pm EST";
let moogieImage = "";
let moogieColor = "ab732b";
let moogieFooter = "Anything subject to change at any time.";
const regex = /"([^"]*)"/;
switch (args[1]) {
case "title":
moogieTitle = regex.exec(message.content);
message.channel.send("Updated title.");
break;
case "description":
moogieDescription = regex.exec(message.content);
message.channel.send("Updated description.");
break;
case "image":
moogieImage = regex.exec(message.content);
message.channel.send("Updated image.");
break;
case "time":
moogieTime = regex.exec(message.content);
message.channel.send("Updated time.");
break;
case "color":
moogieColor = regex.exec(message.content);
message.channel.send("Updated embed color.");
break;
case "footer":
moogieFooter = regex.exec(message.content);
message.channel.send("Updated embed footer.");
break;
case "preset":
switch (args[2]) {
case "tba":
moogieTitle = "To Be Announced...";
moogieDescription = "";
moogieTime = "Friday at 8pm EST";
moogieImage = "";
moogieColor = "ab732b";
message.channel.send("Updated embed to TBA preset.");
break;
}
break;
}
break;
и это результат:
Я новичок в регулярных выражениях, и было бы неплохо протянуть руку помощи, спасибо!
Комментарии:
1. в документах для
RegExp.exec
говорится, что оно возвращает массив, содержащий данные соответствия и другие данные. вы присваиваете массив своим переменным вместо значения группы захвата.
Ответ №1:
Когда вы захватываете часть строки с помощью регулярного выражения (capture)
, оно возвращает массив. Например:
var content = 'abcdefg'
const regex = /(abc)defg/;
// this returns an array of the full string,
// and then all the individual captures
const res = regex.exec(content);
console.log('Full Array: ', res);
console.log('Whole String: ', res[0]) // returns first element in array (whole string)
console.log('First Capture: ', res[1]) // returns second element in array (first capture)
В заключение, вы должны использовать второй элемент в возвратах массива .exec()
, чтобы получить только то, что находится внутри кавычек:
regex.exec(message.content)[1]