量词不工作

时间:2014-09-10 23:50:25

标签: javascript regex

我对正则表达式不好。真糟糕我以为我很体面,但没有。我很糟糕。

由于这一点,我们如何让{1,61}量词对整个前一组产生影响?

^((xn-|[a-zA-Z0-9]+)((-[a-zA-Z0-9]+)+)?){1,61}(\.[a-zA-Z]{2,})?$

这是RegExr

顺便说一下,这是一个域名模式。

1 个答案:

答案 0 :(得分:2)

您的表达无效,因为{1-61}适用于之前的群组,该群组本身包含1个或更多字符。

以下是使用@Casimir评论的积极前瞻的答案:

^(?=.{1,61}$)((xn-|[a-zA-Z0-9]+)((-[a-zA-Z0-9]+)+)?)(\.[a-zA-Z]{2,})?$

请注意,如果您尝试匹配域名,那么您应该在名称中匹配a max of 63 characters,而不是包括dot-tld。上面的表达式将匹配整个名称的最大值61,包括dot-tld,因此它将禁止使用有效名称。也许这更接近你想要的东西:

^(?=[^\.]{1,63}\.)(xn-|[a-zA-Z0-9]+)((-[a-zA-Z0-9]+)+)?(\.[a-zA-Z]{2,})?$