Регулярное выражение тоже вкладывает больше, чем я хочу

#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]