RegEx用于有限重复的字母数字

时间:2013-02-21 07:16:00

标签: javascript regex

我有一个RegEx来检查字母表的有限重复以及两个单独的RegEx中的数字,但我试图结合一个RegEx,但它总是返回true。

// Alphabetes testing:
/([a-z])\1{4,}/.test("sd0") => false
/([a-z])\1{4,}/.test("adsssssd0") => true
// Numeric testing:
/([0-9])\1{3,}/.test("sd00000ds") => true
/([0-9])\1{3,}/.test("sd00s00ds") => false
/(([a-z])\1{4,})|(([0-9])\1{3,})/.test("sd0sds0sds") => true // always true

感谢。

4 个答案:

答案 0 :(得分:2)

只需使用

([a-z0-9])\1{3,}

here on Regexr

表达式的问题是捕获组的编号。它们按开头括号

的顺序编号
(([a-z])\1{3,})|(([0-9])\1{3,})
12              34

所以,通过你的背面参考,你总是引用(([a-z])\1{3,})。如果你引用组内部的一个组(递归),我不确定会发生什么。看起来它匹配每个字符(Regexr

<强>更新

如果有不同的长度要求,那么您需要使用替换,但您需要在替代方案中引用不同的组!

(?:([a-z])\1{4,}|([0-9])\2{3,})

(?:是非捕获组==&gt;它不计入后向引用

here on Regexr

答案 1 :(得分:1)

以下正则表达式怎么样?

([a-z0-9])\1{3,}

如果连续重复3个或更多数字/字母,您所需要的是匹配的,那就可以了。

答案 2 :(得分:1)

您正在检查是否有字母或数字字符集。由于sd0sds0sds位于中间和末尾,true会返回sds

如果你想让字符串符合两个条件 - 应该有一个三个字符的字母集和一个三个字符的数字集,我不认为这可以用一个正则表达式来完成。

如果您希望字符串允许三个字符的字母或数字集合,那么其他答案是合适的(没有反向引用):

[a-z0-9]{3}

答案 3 :(得分:1)

你的上一个正则表达式有错:

(([a-z])\1{4,})|(([0-9])\1{3,})

两次使用\ 1引用,但是\ 1引用括号中的第一个块实际上是

([a-z])\1{4,})|(([0-9])\1{3,}

当您更正参考编号时,您的正则表达式实际上有效

(([a-z])\2{4,})|(([0-9])\4{3,})

查看实际操作:http://regexr.com?33rnk