我有一个正则表达式来检查字母表的有限重复以及两个单独的正则表达式中的数字,但我试图组合成一个正则表达式,但它总是返回 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
谢谢。
最佳答案
直接使用
([a-z0-9])\1{3,}
您的表达式的问题是捕获组的编号。它们按照左括号的顺序编号
(([a-z])\1{3,})|(([0-9])\1{3,})
12 34
因此,通过反向引用,您始终引用 (([a-z])\1{3,})
。如果您引用组本身内部的组(递归),我不确定会发生什么。看起来它匹配每个字符 ( Regexr )
更新:
如果有不同的长度要求,那么你需要使用alternation,但是你需要在alternation中引用不同的组!
(?:([a-z])\1{4,}|([0-9])\2{3,})
(?:
是一个非捕获组 ==> 它不计入反向引用
关于javascript - 用于字母数字有限重复的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14996564/