Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Regex 用于正向前瞻-密码规则的正则表达式(包含必需的数字和字符)_Regex_Regex Lookarounds_Regex Group_Regex Greedy - Fatal编程技术网

Regex 用于正向前瞻-密码规则的正则表达式(包含必需的数字和字符)

Regex 用于正向前瞻-密码规则的正则表达式(包含必需的数字和字符),regex,regex-lookarounds,regex-group,regex-greedy,Regex,Regex Lookarounds,Regex Group,Regex Greedy,我想了解下面的正则表达式,并尝试在中进行测试 解释 ^ # BOS (?= .* [a-zA-Z] ) # Lookahead, must be a letter (?= .* [0-9] ) # Lookahead, must be a number .{4,} # Any 4 or more characters $

我想了解下面的正则表达式,并尝试在中进行测试

解释

 ^                        # BOS
 (?= .* [a-zA-Z] )        # Lookahead, must be a letter
 (?= .* [0-9] )           # Lookahead, must be a number
 .{4,}                    # Any 4 or more characters 
 $                        # EOS

该正则表达式意义不大,可以缩短为:

.{4,}$ // match at least 4 characters (or more) before ending
原因是lookaheads定义了匹配组模式的结束位置。但是,您将先行放置在输入字符串的开头,在所有先行模式前面捕获“”(nothing)。所以所有的头像都是多余的

因此:

^
模式必须在输入开始时开始

(?=.[a-zA-Z])
查找任意数量的连续字母表的前向(找到“TestPassword”,未包含在匹配组中)

(?=.[0-9])
查找任意数量的数字前向(找到“1”未包含在匹配组中)

如上所述,唯一匹配项是“TestPassword1”开头的“”。现在我们继续匹配

{4,}$
现在可以匹配位于文本末尾至少4个字符中的任何字符 输入(找到“TestPassword1”,作为匹配组返回)

有关证明和说明,请参见以下代码:

let regex=/^(?=.[a-zA-Z])(?=.[0-9])。{4,}$/;
[match]=“TestPassword1”。匹配(regex);
控制台日志(匹配)//测试密码1
//只需测试lookaheads就会在输入的开头(在“T”之前)匹配一个空字符串
正则表达式=/^(?=.[a-zA-Z])(?=.[0-9])/;
match=“TestPassword1.match(regex);
控制台日志(匹配)//[""]
//在输入结束之前,我们正在测试至少4个字符
正则表达式=/。{4,}$/;
[match]=“TestPassword1”。匹配(regex);

控制台日志(匹配)//TestPassword1
在regex101I中有一个解释部分,我知道这个结果。但我不理解积极前瞻的规则
regex1(?=regex2)
这是第一次搜索
regex1
,如果存在
regex2
。但是,
^(?=.[a-zA-Z])(?=.[0-9])。{4,}$
…不用担心,我们都去过那里,正则表达式不容易,不可能在一天内掌握。只要迈出一小步,一步一步,你就会越来越好。您可以从web上的资源开始,比如@greenb-断言和其他非消耗性构造,实际上并不存在于字符位置。它们存在于人物之间。这是我在SO写的一个主题,但我就是找不到它的链接。太糟糕了,也许你能找到它,它会帮助你永远了解这些鬼魂。@sln非常感谢你。我从你的评论中了解到:)
.{4,}$ // match at least 4 characters (or more) before ending