Обнаруживать целое слово в конце без знаков препинания в диссонансе. js - PullRequest
0 голосов
/ 19 июня 2020

Я хочу, чтобы бот отвечал на мое сообщение, если оно содержит определенное c слово, в конце предложения или только в сообщении, игнорируя знаки препинания, и проигнорирует сообщение, если слово вставляет другое слово. Пример: слово «да»

«Я сказал да!» -> true

«Да» -> true

«Глаза» -> false

На данный момент я сделал это:

const Discord = require('discord.js');
const client = new Discord.Client();

client.once('ready', () => {
    console.log(`Online`);
});

const responseObject = {
    "yes": "ok !",
    "no": "potato !"
};

client.on('message', message => {
    var regex = /[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]/g;
    var regexx = /[ \t]+$/g;
    message.content = message.content.toLowerCase();
    message.content = message.content.replace(regex, '')
    message.content = message.content.replace(regexx, '')

    if(responseObject[message.content]) {
        message.channel.send(responseObject[message.content]);
    }

});

А также, есть ли способ еще больше оптимизировать этот код? Заранее спасибо.

1 Ответ

3 голосов
/ 19 июня 2020

Вот функция для получения последнего слова в строке:

function getLastWord(str) {
    return (str.toLowerCase().match(/(\w+)\W*$/) || [])[1];
}

getLastWord("I said yes !"); // "yes"
getLastWord("Yes"); // "yes"
getLastWord("Eyes"); // "eyes"

Вот объяснение регулярного выражения:

(\w+) - соответствует любому слову
\W* - соответствовать любым не буквенно-цифровым c символам
$ - концу строки

В основном, требуя, чтобы каждый символ между словом и концом строки не был буквенно-цифровым c заставляет слово должно быть последним словом в предложении. (statement || []) гарантирует, что функция вернет undefined при отсутствии слов вместо ошибки. [1] должен получить первую группу захвата, поскольку match возвращает массив.

...