我想了解以下正则表达式,并尝试在regex101
中对其进行测试^(?=.*[a-zA-Z])(?=.*[0-9]).{4,}$
答案 0 :(得分:0)
解释
^ # BOS
(?= .* [a-zA-Z] ) # Lookahead, must be a letter
(?= .* [0-9] ) # Lookahead, must be a number
.{4,} # Any 4 or more characters
$ # EOS
答案 1 :(得分:0)
该正则表达式意义不大,可以缩短为:
.{4,}$ // match at least 4 characters (or more) before ending
原因是先行定义了匹配组模式结束的位置。但是,您将先行放置在输入字符串的开头,在所有先行模式的前面捕获“”(什么都没有)。所以所有 lookaheads 都是多余的。
所以:
^
模式必须从输入的开头开始
(?=.*[a-zA-Z])
查找任意数量的连续字母(查找为“ TestPassword”,不不包含在匹配组中)
(?=.*[0-9])
查找任意数量的数字(找到“ 1”,不不包含在匹配组中)鉴于上面,唯一的匹配项是“ TestPassword1”开头的“”。现在我们继续进行匹配...
.{4,}$
现在可以匹配位于末尾的至少4个字符中的任何一个 输入(找到“ TestPassword1”,作为匹配组返回 )
有关证明和解释,请参见以下代码:
let regex = /^(?=.*[a-zA-Z])(?=.*[0-9]).{4,}$/;
[match] = "TestPassword1".match(regex);
console.log(match); //TestPassword1
// just test for lookaheads result in matching an empty string at the start of input (before "T")
regex = /^(?=.*[a-zA-Z])(?=.*[0-9])/;
match = "TestPassword1".match(regex);
console.log(match); //[""]
// we're now testing for at least 4 characters of anything just before the end of input
regex = /.{4,}$/;
[match] = "TestPassword1".match(regex);
console.log(match); //TestPassword1