我正在为我的discord.js机器人做一个过滤器。 如果字符不在英文字母表中,则应将其删除,以便筛选器可以检查字符串中的单词是否被筛选。
const alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "j", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
bot.on("message", message => {
if (message.author.bot) return;
if (message.channel.type == "dm") return;
var args = message.content;
var argsnt = message.content.toLowerCase().toString().split("");
var str = "";
// Checking each character.
argsnt.forEach(element => {
if (!alphabet.includes(element) && !str.includes(element)) {
str = str + element;
console.log("add");
console.log(str);
}
});
// Removing the characters.
const search = str;
const replacer = new RegExp(search, 'g');
args = args.replace(replacer, "");
message.reply(args);
});
问题:
如果你有两个不同的符号,它只会移除其中一个符号。
如果它是像括号那样打开或关闭的东西,它将给我一个关于正则表达式的错误。
注意:
我从上面的代码中收到的唯一错误是正则表达式错误。 我已经研究和测试了很多东西一个多星期了,现在还没有找到任何解决方案。 我现在不是想要最快的方法。 我只是想找些管用的东西。
实际上,您可以使用RegEx.replace()
执行此操作,如下所示:
args.toLowerCase().replace(/[^a-z]/g, '')
如果您使用这个,请确保args保留为消息内容,而不是拆分的消息内容。