Javascript 正好包含2个大写字母和3个数字的正则表达式
我需要精确地匹配包含的单词2个大写字母和3个数字。数字和大写字母可以在单词中的任何位置 HelLo1aa2s3d:是的 WindowA1k2j3:true AAAsjs21js1:错误 asaak12:错误 我的正则表达式尝试,但仅匹配2个大写字母:Javascript 正好包含2个大写字母和3个数字的正则表达式,javascript,regex,Javascript,Regex,我需要精确地匹配包含的单词2个大写字母和3个数字。数字和大写字母可以在单词中的任何位置 HelLo1aa2s3d:是的 WindowA1k2j3:true AAAsjs21js1:错误 asaak12:错误 我的正则表达式尝试,但仅匹配2个大写字母: ([a-z]*[A-Z]{1}[a-z]*){2} 您可以使用regex: /^(?=(?:.*[A-Z].*){2})(?!(?:.*[A-Z].*){3,})(?=(?:.*\d.*){3})(?!(?:.*\d.*){4,}).*$/gm
([a-z]*[A-Z]{1}[a-z]*){2}
您可以使用regex:
/^(?=(?:.*[A-Z].*){2})(?!(?:.*[A-Z].*){3,})(?=(?:.*\d.*){3})(?!(?:.*\d.*){4,}).*$/gm
说明:
^ // assert position at beginning of line
(?=(?:.*[A-Z].*){2}) // positive lookahead to match exactly 2 uppercase letters
(?!(?:.*[A-Z].*){3,}) // negative lookahead to not match if 3 or more uppercase letters
(?=(?:.*\d.*){3}) // positive lookahead to match exactly 3 digits
(?!(?:.*\d.*){4,}) // negative lookahead to not match if 4 or more digits
.* // select all of non-newline characters if match
$ // end of line
/gm // flags: "g" - global; "m" - multiline
使用
字符串的解决方案。匹配函数:
function checkWord(word) {
var numbers = word.match(/\d/g), letters = word.match(/[A-Z]/g);
return (numbers.length === 3 && letters.length === 2) || false;
}
console.log(checkWord("HelLo1aa2s3d")); // true
console.log(checkWord("WindowA1k2j3")); // true
console.log(checkWord("AAAsjs21js1")); // false
console.log(checkWord("ASaaak12")); // false
没有前瞻性,纯正则表达式:
基本上,只需检查每个案例。我认为,您只需要一个前瞻
^(?=(?:\D*\d){3}\D*$)(?:[^A-Z]*[A-Z]){2}[^A-Z]*$
\d
是一个数字\D
是\D
的否定,与非数字匹配
(?=
打开正极。(?:
打开正极
- 在
^
开始(?=(?:\D*\D){3}\D*$)
向前看正好三位数字,直到$
开始
- 如果条件成功,
(?:[^A-Z]*[A-Z]){2}[^A-Z]*
将字符串与两个大写字母匹配,直到$
结束。[^
打开一个字符串
如果只允许字母数字字符,请将[^A-Z]
替换为[A-Z\d]
“大写数字”什么是大写数字?澄清一下,一个包含3个大写字母或4个数字的字符串将被取消资格?也就是说,字符串中必须正好有2个大写字母和3个数字?是!>AAAsjs21js1:false。它们可以位于任何位置,不一定是连续的。啊。感谢您的帮助。已修复。这与“精确”不符部分要求。我将修改解决方案。我假设OP至少意味着。