正则表达式,正好有2个大写字母和3个数字

时间:2016-05-15 11:01:58

标签: javascript regex

我需要匹配包含完全 2个大写字母和3个数字的单词。数字和大写字母可以位于单词中的任何位置。

  

HelLo1aa2s3d:true

     

WindowA1k2j3:true

     

AAAsjs21js1:false

     

ASaaak12:false

我的正则表达式尝试,但只匹配2个大写字母:

([a-z]*[A-Z]{1}[a-z]*){2}

4 个答案:

答案 0 :(得分:2)

您可以使用正则表达式 lookaheads

/^(?=(?:.*[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

<强> Regex101

答案 1 :(得分:1)

使用String.match函数的解决方案:

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

答案 2 :(得分:1)

我想,你只需要一个前瞻。

^(?=(?:\D*\d){3}\D*$)(?:[^A-Z]*[A-Z]){2}[^A-Z]*$
  • \d是数字的short\D\d的否定,匹配非数字
  • (?=打开正面lookahead(?:会打开non capturing group
  • ^开始(?=(?:\D*\d){3}\D*$)向前看正好三位数,直到$ end
  • 如果条件成功(?:[^A-Z]*[A-Z]){2}[^A-Z]*匹配一个字符串,其中只有两个高位字母,直到$结束。 [^会打开negated character class

Demo at regex101

如果您只想允许使用字母数字字符,请将[^A-Z]替换为[a-z\d] like in this demo

答案 3 :(得分:0)

没有前瞻,纯正的正则表达式:

http://regexr.com/3ddva

基本上,只检查每个案例。