正则表达式检测一个字符是否在同一个字符串中只出现一次

Regex to detect if a character appears only once in the same string

我正在创建一个松弛斜杠命令,我想按照 /command send @jay some flowers 行发送正文,但我想发送一个错误,因为该命令不包含 @handles 或包含多个 @handles。

我当时编写代码的方式是使用正则表达式来验证句柄是否存在 /.*\@.*/ 但我正在疯狂地尝试处理边缘情况并围绕检测一个且仅 1 个进行一些验证@符号.

我正在 javascript 在 Gscript 网络服务中验证它是否有帮助

有什么想法吗? 谢谢

您无需使用正则表达式即可轻松实现,只需使用 @ 拆分字符串并检查生成的数组是否仅包含 2 个字符串:

const isUnique = (char, string) => {
  return string.split(char).length === 2
}

console.log(isUnique('@', '/command send @jay some flowers'))
console.log(isUnique('@', '/command @send @jay some flowers'))

这里有两种表示否定和肯定检查的表达式:

  • 匹配没有@句柄或至少有两个的字符串:/^(?!.*@\w)|@\w.*@\w/ - 参见proof
  • 匹配只有一个@句柄的字符串:/^(?!.*@\w.*@\w).*@\w/ - 参见proof

我认为你的@handle 必须是 @ + 一个单词字符,而不是单个 @.