如何让不和谐的机器人正确地自动大写字符串的第一个字母?正则表达式

How to make a discord bot correctly auto-capitalize the first letter of a string? regex

我一直在尝试将其添加到我的个人 discord 机器人中,以使用 discord.js:

if (message.content.charAt(0) !== /[A-Z0-9]/g && message.content !== 'lol') {
    let UpfirstLetter = message.content.charAt(0).toUpperCase();
    let restOfLetters = message.content.slice(1);

    return message.channel.send(`*${UpfirstLetter}${restOfLetters}`);

}

但它一直在首字母大写,尽管已经如此。 喜欢:

me: Good
bot: *Good

我是正则表达式的新手。我想这与那部分有关吗?

P.S。欢迎任何改进正则表达式过滤效果的建议。

你的问题是这个 message.content.charAt(0) !== /[A-Z0-9]/g 这是检查位置 0 处的字符是否等于正则表达式,如果不匹配则不检查,所以它与 'a' !== new RegExp() 这总是正确的。

你要的是.test()函数所以你可以这样写

!/[A-Z0-9]/g.test(message.content.charAt(0))

if (!/[A-Z0-9]/g.test('g')) {
  console.log('Not Uppercase')
}

if (!/[A-Z0-9]/g.test('G')) {
  console.log("Won't hit this")
}

如评论中所述,类似

if ( message.content.charAt(0).toUpperCase() !== message.content.charAt(0) )

也适用于非 ASCII 字符,只是将大写字母的责任推迟到 Javascript。

因为我不知道什么是 discord bot,所以我更愿意告诉你将第一个字母存储在一个变量中,以确保更好的性能和代码可读性

const firstLetter = message.content.charAt(0);
if ( firstLetter !== firstLetter ) {
    //
}