我有一个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
感谢。
答案 0 :(得分:2)
只需使用
([a-z0-9])\1{3,}
表达式的问题是捕获组的编号。它们按开头括号
的顺序编号(([a-z])\1{3,})|(([0-9])\1{3,})
12 34
所以,通过你的背面参考,你总是引用(([a-z])\1{3,})
。如果你引用组内部的一个组(递归),我不确定会发生什么。看起来它匹配每个字符(Regexr)
<强>更新强>
如果有不同的长度要求,那么您需要使用替换,但您需要在替代方案中引用不同的组!
(?:([a-z])\1{4,}|([0-9])\2{3,})
(?:
是非捕获组==&gt;它不计入后向引用
答案 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