以下是直接答案。我把它们写得很短,因为如果不了解正则表达式,它们就没有意义。最好在http://www.regular-expressions.info/tools.html获得这种理解。我建议您也尝试那里列出的正则表达式帮助工具,它们允许您进行实验 - 在您编辑模式时查看实时捕获/匹配,非常有帮助。
围绕某事物的简单括号 ( ) 使其成为一个组。在这里,您有 (?=) 这是一个断言,特别是一个积极的前瞻性断言。它所做的只是检查里面的内容是否从大海捞针中的当前光标位置向前移动。还在我这儿?示例: foo(?=bar) 仅当 foo 后跟 bar 时才匹配。bar 永远不会匹配,只返回 foo。
考虑到这一点,让我们剖析您的正则表达式:
/^.*(?=.{4,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/
Reads as:
^.* From Start, capture 0-many of any character
(?=.{4,}) if there are at least 4 of anything following this
(?=.*[0-9]) if there is: 0-many of any, ending with an integer following
(?=.*[a-z]) if there is: 0-many of any, ending with a lowercase letter following
(?=.*[A-Z]) if there is: 0-many of any, ending with an uppercase letter following
.*$ 0-many of anything preceding the End