Javascript RegEx - 强制执行两个最大长度

Javascript RegEx - Enforcing two max-lengths

我已经花了一段时间来解决这个问题。希望你能给我 一些指点。

我想要实现的是,该字符串应包含 EXACTLY 4 个 '-' 和 10 个数字(按任何给定顺序)。

我创建了这个正则表达式:^(-\d-){10}$ 它确实在数字上强制执行最大长度为 10,但我没有办法为 '-'

实现最大长度为 4

谢谢

好的,这是一个模式:

^(?=(?:\d*?-){4}\d*$)(?=(?:-*?\d){10}-*$).{14}$

Demo

解释:

  • 主要部分是^.{14}$,它简单地检查字符串中有14个字符。

  • 然后,开头有两个前瞻:

    • (?=(?:\d*?-){4}\d*$)
    • (?=(?:-*?\d){10}-*$)

    第一个检查连字符,第二个检查数字并确保计数正确。两者都匹配整个输入字符串并且非常相似所以我们只看第一个。

    • (?:\d*?-){4} 匹配任意数量的数字(或 none)后跟一个连字符,四次。这场比赛之后,我们知道有四个连字符。 (我使用了一个不贪婪的量词(*?)只是为了防止无用的回溯,作为一种优化)
    • \d*$ 只是确保字符串的其余部分仅由数字组成。