为了账号安全,请及时绑定邮箱和手机立即绑定

这个正则表达式是什么:/^\D(?=\w{5})(?=\d{2})/ 不匹配“bana12”?

这个正则表达式是什么:/^\D(?=\w{5})(?=\d{2})/ 不匹配“bana12”?

心有法竹 2022-12-02 10:36:18
目标是匹配长度大于 5 个字符、不以数字开头且有两个连续数字的字符串。我认为我的正则表达式足以做到这一点,但不匹配“bana12”。这个正则表达式完成了这项工作:var pwRegex =  /^\D(?=\w{5})(?=\w*\d{2})/;这个正则表达式不是比我的更严格吗?为什么我必须指定两个或多个数字前面有零个或多个字符?
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

它比你的限制少。

在 之后\D,有 2 个前瞻。对于您的正则表达式,它们是

(?=\w{5})(?=\d{2})

这意味着非数字后面的东西必须同时满足它们。那是,

  • 非数字后必须有 5 个单词字符,并且

  • 非数字后必须有 2 位数字。

ana12紧跟在字符串中的非数字之后。an不是 2 位数字,因此您的正则表达式不匹配。

然而,工作正则表达式有这两个先行:

(?=\w{5})(?=\w*\d{2})

它断言紧接在 之后必须有这两件事\D

  • 5个单词字符,

  • 一堆单词字符,后跟两位数字

ana12符合这两种描述。

试试这个Regex101 演示。查看正则表达式调试器中的第 6 步。那是它试图匹配第二个前瞻的时候


查看完整回答
反对 回复 2022-12-02
?
LEATH

TA贡献1936条经验 获得超7个赞

您走在正确的轨道上,也许可以使用前瞻,并且模式的开始也正确,但是它缺少一些东西。考虑这个版本:


^\D(?=.*\d{2})\w{4,}$

下面是对模式的解释:


^                from the start of the string

    \D           match any non digit character

    (?=.*\d{2})  then lookahead and assert that two consecutive digits occur

    \w{4,}       finally match four or more word characters (total of 5 or more characters)

$                end of the string

您当前尝试中缺少的主要部分是它在开头仅匹配一个非数字字符。您需要提供一个可以匹配 5 个或更多字符的模式。


查看完整回答
反对 回复 2022-12-02
  • 2 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号