gpt4 book ai didi

javascript - 在 JavaScript 正则表达式中链接多个正向前瞻

转载 作者:行者123 更新时间:2023-12-04 15:51:37 24 4
gpt4 key购买 nike

我是学习正则表达式的新手,我遇到了this answer它使用积极的前瞻来验证密码。

正则表达式是 - (/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/)用户提供的分割是-

(/^
(?=.*\d) //should contain at least one digit
(?=.*[a-z]) //should contain at least one lower case
(?=.*[A-Z]) //should contain at least one upper case
[a-zA-Z0-9]{8,} //should contain at least 8 from the mentioned characters
$/)

但是,我不太清楚将多个前瞻链接在一起。根据我所学到的,积极的前瞻检查表达式是否后跟前瞻中指定的内容。例如,这个 answer说——

The regex is(?= all) matches the letters is, but only if they are immediately followed by the letters all



所以,我的问题是个人前瞻如何工作?如果我把它分解——
  • 第一部分是^(?=.*\d) .这是否表明在 开始 的字符串,查找任何字符的零次或多次出现,后跟 1 位数字(从而检查 1 位数字的存在)?
  • 如果第一部分正确,则使用第二部分 (?=.*[a-z]) , 是否检查 之后在字符串的开头检查第 1 步,查找零个或多个出现的任何字符,后跟一个小写字母?还是这两个前瞻完全不相关?
  • 还有,( ) 有什么用?围绕每个前瞻?它会创建一个捕获组吗?

  • 我也看过 Rexegg article在前瞻中,但它并没有太大帮助。

    将不胜感激任何帮助。

    最佳答案

    正如评论中提到的,这里的关键点不是前瞻,而是 回溯 :(?=.*\d)查找一个完整的行 ( .* ),然后回溯以找到至少一个数字 ( \d )。

    这在不同的前瞻中重复,并且可以像这样优化:

    (/^
    (?=\D*\d) // should contain at least one digit
    (?=[^a-z]*[a-z]) // should contain at least one lower case
    (?=[^A-Z]*[A-Z]) // should contain at least one upper case
    [a-zA-Z0-9]{8,} // should contain at least 8 from the mentioned characters
    $/)

    这里适用对比原理。

    关于javascript - 在 JavaScript 正则表达式中链接多个正向前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47120955/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com