亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個正則表達式是什么:/^\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 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號