我一直在尝试将其添加到我的个人不和谐机器人中,以使用 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: Goodbot: *Good我是正则表达式的新手。我想这与那部分有关吗?PS 欢迎提出任何改进正则表达式过滤效果的建议。
2 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
正如评论中所说,类似
if ( message.content.charAt(0).toUpperCase() !== message.content.charAt(0) )
也适用于非 ASCII 字符,只是将大写字母的责任推迟到 Javascript。
由于我不知道什么是不和谐机器人,我更愿意告诉您将第一个字母存储在变量中,以确保更高的性能和代码可读性
const firstLetter = message.content.charAt(0);
if ( firstLetter !== firstLetter ) {
//
}
富国沪深
TA贡献1790条经验 获得超9个赞
您的问题是这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")
}
添加回答
举报
0/150
提交
取消