Javascript 这个正则表达式是什么:/^\D(?=\w{5})(?=\D{2})/不匹配";bana12“是什么;?

Javascript 这个正则表达式是什么:/^\D(?=\w{5})(?=\D{2})/不匹配";bana12“是什么;?,javascript,regex,Javascript,Regex,目标是匹配长度大于5个字符、不以数字开头且具有两个连续数字的字符串。我认为我的正则表达式足以做到这一点,但与“bana12”不匹配 此正则表达式执行以下任务: var pwRegex = /^\D(?=\w{5})(?=\w*\d{2})/; 这个正则表达式不是比我的更严格吗?为什么我必须指定两个或多个数字前面有零个或多个字符?您使用lookaheads的方法是正确的,而且模式的开头也是正确的,但它缺少一些东西。考虑这个版本: ^\D(?=.*\d{2})\w{4,}$ 以下是对该模式的解

目标是匹配长度大于5个字符、不以数字开头且具有两个连续数字的字符串。我认为我的正则表达式足以做到这一点,但与“bana12”不匹配

此正则表达式执行以下任务:

var pwRegex =  /^\D(?=\w{5})(?=\w*\d{2})/;

这个正则表达式不是比我的更严格吗?为什么我必须指定两个或多个数字前面有零个或多个字符?

您使用lookaheads的方法是正确的,而且模式的开头也是正确的,但它缺少一些东西。考虑这个版本:

^\D(?=.*\d{2})\w{4,}$
以下是对该模式的解释:

^                from the start of the string
    \D           match any non digit character
    (?=.*\d{2})  then lookahead and assert that two consecutive digits occur
    \w{4,}       finally match four or more word characters (total of 5 or more characters)
$                end of the string

当前尝试缺少的主要部分是,它只匹配开头的一个非数字字符。您需要提供一个可以匹配5个或更多字符的模式。

它比您的模式限制更少

\D
之后,有两个lookahead。对于你的正则表达式,它们是

(?=\w{5})(?=\d{2})
这意味着非数字后面的东西必须同时满足这两个条件。就是

  • 非数字后面必须有5个单词字符,并且
  • 非数字后面必须紧跟两位数字
字符串中的非数字后面紧跟着
ana12
<代码>一个不是两位数,因此您的正则表达式不匹配

但是,工作正则表达式有以下两个外观:

(?=\w{5})(?=\w*\d{2})
它断言在
\D
之后必须立即有这两件事:

  • 5个单词字符,以及
  • 一组单词字符,后跟两个数字
ana12
符合这两种描述

试试这个。查看regex调试器中的步骤6。这就是它试图匹配第二个前瞻的时候