问题 使用?=。在正则表达式中


我看到了这句话

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9_#@%\*\-]{8,24}$

在正则表达式,这是密码检查机制。我读了很少关于正则表达式的课程,但我从未见过组合 ?=. 解释。

我想知道它是如何工作的。在示例中,它搜索至少一个大写字母,一个小写字母和一个数字。我想这就像“如果”。


11138
2018-03-16 15:33


起源

积极的向前看 - devnull
如果您想知道正则表达式字符的含义,请在regexr.com上输入正则表达式。然后将鼠标悬停在字符上,它将在工具提示中显示含义。 - Barmar
你也可以在这里找到解释 regex101.com - devnull
特别要注意的是 . 与...无关 (?=。你的正则表达式开头 (?= (确保你可以看到,但不要消费)紧接着 .* (零个或多个任何字符)。 - Phrogz
可能重复 什么?=正则表达式中的意思? - Ruslan


答案:


(?=regex_here) 是一个 积极的向前看。它是一个零宽度断言,意味着它匹配包含在其中的正则表达式后面的位置 (?= 和 )。要从链接页面引用:

lookaround实际匹配字符,但随后放弃匹配,   仅返回结果:匹配或不匹配。这就是他们的原因   称为“断言”。它们不消耗字符串中的字符,但是   只断言是否可以匹配。 Lookaround允许你   创建无法创建的正则表达式   他们,或没有他们会变得非常漫长。

. 不是前瞻的一部分,因为它匹配任何不是行终止符的单个字符。


13
2018-03-16 15:36



我没有贬低你。无论如何它似乎不适用于javascript,不好。 - mpm