Javascript RegEx - 强制执行两个最大长度
Javascript RegEx - Enforcing two max-lengths
我已经花了一段时间来解决这个问题。希望你能给我
一些指点。
我想要实现的是,该字符串应包含 EXACTLY 4 个 '-' 和 10 个数字(按任何给定顺序)。
我创建了这个正则表达式:^(-\d-){10}$
它确实在数字上强制执行最大长度为 10,但我没有办法为 '-'
实现最大长度为 4
谢谢
好的,这是一个模式:
^(?=(?:\d*?-){4}\d*$)(?=(?:-*?\d){10}-*$).{14}$
解释:
主要部分是^.{14}$
,它简单地检查字符串中有14个字符。
然后,开头有两个前瞻:
(?=(?:\d*?-){4}\d*$)
(?=(?:-*?\d){10}-*$)
第一个检查连字符,第二个检查数字并确保计数正确。两者都匹配整个输入字符串并且非常相似所以我们只看第一个。
(?:\d*?-){4}
匹配任意数量的数字(或 none)后跟一个连字符,四次。这场比赛之后,我们知道有四个连字符。 (我使用了一个不贪婪的量词(*?
)只是为了防止无用的回溯,作为一种优化)
\d*$
只是确保字符串的其余部分仅由数字组成。
我已经花了一段时间来解决这个问题。希望你能给我 一些指点。
我想要实现的是,该字符串应包含 EXACTLY 4 个 '-' 和 10 个数字(按任何给定顺序)。
我创建了这个正则表达式:^(-\d-){10}$ 它确实在数字上强制执行最大长度为 10,但我没有办法为 '-'
实现最大长度为 4谢谢
好的,这是一个模式:
^(?=(?:\d*?-){4}\d*$)(?=(?:-*?\d){10}-*$).{14}$
解释:
主要部分是
^.{14}$
,它简单地检查字符串中有14个字符。然后,开头有两个前瞻:
(?=(?:\d*?-){4}\d*$)
(?=(?:-*?\d){10}-*$)
第一个检查连字符,第二个检查数字并确保计数正确。两者都匹配整个输入字符串并且非常相似所以我们只看第一个。
(?:\d*?-){4}
匹配任意数量的数字(或 none)后跟一个连字符,四次。这场比赛之后,我们知道有四个连字符。 (我使用了一个不贪婪的量词(*?
)只是为了防止无用的回溯,作为一种优化)\d*$
只是确保字符串的其余部分仅由数字组成。