我已經嘗試使用正則表達式/^(\S+)(?:\?$|$)/
正則表達式組包括:如果條件
與yolo
和yolo?
作品既但第二個字符串(yolo?
)的?
將被包括在捕獲組(\S+)
。
這是一個正則表達式的錯誤,或者我犯了一些錯誤?
編輯:我不想那'''包括在捕獲組中。 Sry爲我的英語不好。
我已經嘗試使用正則表達式/^(\S+)(?:\?$|$)/
正則表達式組包括:如果條件
與yolo
和yolo?
作品既但第二個字符串(yolo?
)的?
將被包括在捕獲組(\S+)
。
這是一個正則表達式的錯誤,或者我犯了一些錯誤?
編輯:我不想那'''包括在捕獲組中。 Sry爲我的英語不好。
您可以使用
如果你想捕捉不能有它?
什麼,用一個否定的字符類[^...]
(見demo here):
^([^\s?]+)\??$
如果要捕獲的內容可以包含?
(例如,yolo?yolo?
並且您想要 yolo?yolo
),您需要通過添加?
+
lazy,讓您的量詞(見demo here):
^(\S+?)\??$
有BTW沒有必要捕獲組在這裏,您可以使用look ahead(?=...)
代替,並期待在整個比賽(見demo here):
^[^\s?]+(?=\??$)
發生了什麼
規則是:量詞(如+
)默認爲greedy,正則表達式引擎將返回它找到的第一個匹配。
慮這意味着什麼位置:
\S+
將首先匹配yolo?
一切,那麼發動機將嘗試匹配(?:\?$|$)
。\?$
失敗(我們已經在字符串的末尾,所以我們現在嘗試匹配一個空字符串,並且沒有?
左側),但$
匹配。正則表達式已經成功地到達終點時,發動機將返回那裏\S+
匹配了所有的字符串和一切是第一個捕獲組的比賽。
要匹配你想要什麼,你必須做量詞懶惰(+?
),或阻止字符類(是的,\S
是一個字符類)從符合結束符?
(與[^\s?]
爲例)。
充分利用+
非貪婪:
^(\S+?)\??$
你最想達到什麼目的? – sshashank124
@AvinashRaj Sry對於下一次我會更好地解釋我的問題 – Keltere
你是這個網站的新手,所以沒問題:-) –