【问题标题】:Regex to detect if a character appears only once in the same string正则表达式检测一个字符是否在同一个字符串中只出现一次
【发布时间】:2021-02-13 04:00:36
【问题描述】:

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

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

如果有任何帮助,我正在 Gscript Web 服务中的 javascript 中验证它

有什么想法吗? 谢谢

【问题讨论】:

  • 你可以简单地检查if (yourString.match(/\@/g).length !== 1) { // OK } else { // NOT OK }
  • 是的,有几种方法可以很容易地在代码中做到这一点,但我构建了原型以寻找完整的正则表达式匹配,然后我陷入了尝试更新它的兔子洞添加到代码中。我几乎可以肯定进入沉没成本领域,但我在这个阶段才知道......不过谢谢你的回答
  • 如果可能的话,请给有用的答案投票。

标签: javascript regex google-apps-script slack


【解决方案1】:

您可以在不使用正则表达式的情况下轻松实现这一点,只需使用 @ 拆分字符串并检查生成的数组是否仅包含 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'))

【讨论】:

  • 如果字符串不包含任何'@',则返回真事件;返回语句应该是return string.split(char).length === 2;
  • @secan ooup 感谢提醒我更新了我的答案:)
【解决方案2】:

下面是否定和肯定检查的两个表达式:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2013-08-01
    • 2021-04-24
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多