我碰到這個正則表達式在jQuery的源代碼來了:這個正則表達式部分添加了什麼?
...
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
...
我想知道爲什麼它是相當複雜的。我在第二部分,背後的原因特別感興趣:
(?:.*? rv:([\w.]+))?
我做了一些研究,但我無法弄清楚什麼正則表達式,這部分增加。
(?:) to match but not capture
.*? any amount of any character
rv: something literal
([\w.]+) one or more word characters or a dot
? appear 0 or 1 time
特別是,最後的?
對我沒有多大意義。如果有或沒有第二部分定義的子字符串,整個第二部分匹配。隨着一些試驗和正則表達式似乎錯誤不會對剛剛有所不同:
/(mozilla)/
有人能闡明什麼正則表達式的第二部分是應該做一些輕?它是什麼限制;什麼字符串失敗,通過/(mozilla)/
或其他方式?
我懷疑這是通過將其放入自己的用戶代理字符串來解決某些瀏覽器Mozilla的僞裝。 –
你能提供更多的上下文嗎?這是一個jQuery插件的一部分?如果是這樣,哪一個?知道這段代碼出現的位置可能會爲作者想要這種特定模式,以及模式的作用提供一些信息。 – jefflunt
@Rafe Kettler:我不確定我是否正確理解你。正則表達式添加什麼來防止僞造者? – pimvdb