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