Regexp最多有2个连续的相等字符和其他选项

时间:2018-03-22 16:04:53

标签: javascript regex

我对regualr表达式全新,我必须构建一个具有以下必要条件:

  • 8到15个字符

  • 至少1个字母字符(a-z,A-Z)

  • 至少1个非字母(所有其他字母)

  • 至少1封大写字母

  • 至少1封非大写字母

  • 最多2个连续的相等字符(例如:'g'接受,'gg'接受,'ggg'不接受)

我试过这个,但它只能用最多5个连续相等的字符(不明白为什么)。我做错了什么?

var regexp = /^((?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])(.{8,15})(?!.*(.)\1{2}))$/;

编辑它适用于

asdfghjkl1Q
asdfghjkl1QQQ
asdfghjkl1QQQQQ

它不适用于

asdfghjkl1QQQQQQ
asdfghjkl1QQQQQq

我想要获得的是: 使用:

asdfghjkl1Q
asdfghjkl1QQ
asdfghjkl11

不使用:

asdfghjkl1QQQ
asdfghjkl1QQq
asdfghjkl111

1 个答案:

答案 0 :(得分:2)

我认为您不需要外部捕获组,因此您可以省略它。

您可以先使用前瞻$

检查字符串(?=.{8,15}$)结尾前的8,15个字符

如果所有前瞻符合,则匹配任何字符一次或多次.+

试试这样:

^(?=.{8,15}$)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])(?!.*(.)\1{2}).+$