使用JavaScript这么长时间后,我会知道如何构建正则表达式,但是学习^^
太繁琐了我需要一个能匹配引号中一个字符串的正则表达式。
例如:"CC1AD849"
"AAAAAAAA"
或"12345678"
到目前为止,我得到了/"[A-Z0-9]{8}"/
,但没有满足最后的条件...
(它会找到很多我不感兴趣的词)
答案 0 :(得分:5)
您可以使用
/"(?=(?:[0-9]*[A-Z]){2})(?=(?:[A-Z]*[0-9]){2})[A-Z0-9]{8}"/g
请参见regex demo
详细信息
"
-双引号(?=(?:[0-9]*[A-Z]){2})
-当前行右边的正向查找,需要两个任意0+数字的序列,后跟一个大写ASCII字母(?=(?:[A-Z]*[0-9]){2})
-当前行右边的正向查找,需要两个序列,这些序列包含任意0+个大写ASCII字母,后跟一个数字[A-Z0-9]{8}
-8个大写ASCII字母或数字"
-双引号。JS演示:
var s = '"CC1AD849" "11111112" "CDFGHJYF"';
console.log(s.match(/"(?=(?:[0-9]*[A-Z]){2})(?=(?:[A-Z]*[0-9]){2})[A-Z0-9]{8}"/g));
答案 1 :(得分:1)
应该是这样的:
/^(?=(.*\d){2})(?=(.*[A-Z]){2})[A-Z0-9]{8}$/
说明:
/^
(?=(.*\d){2}) // uses lookahead (?=) and says the password must contain at least 2 digits
(?=(.*[A-Z]){2}) // uses lookahead (?=) and says the password must contain at least 2 Upper Case chars
[A-Z0-9]{8} // should contain strictly 8 from the mentioned characters
$/