如何让不和谐的机器人正确地自动大写字符串的第一个字母?正则表达式
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 ) {
//
}
我一直在尝试将其添加到我的个人 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 ) {
//
}