Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正好包含2个大写字母和3个数字的正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 正好包含2个大写字母和3个数字的正则表达式

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

我需要精确地匹配包含的单词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
说明:

^                     // 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至少意味着。