2012-01-06 124 views
0

我需要建立正則表達式的幫助。有一行Javascript:正則表達式如何?

navigator.userAgent.match(/Firefox\/3./) 

現在它只匹配Firefox 3.x.我需要的是一個表達式,它將匹配來自3rd的任何Firefox版本。意思是Firefox 3,4,5等。

歡迎任何建議!

+1

現在我認爲用戶代理測試是皺眉... – ChaosPandion 2012-01-06 02:08:39

回答

4

你不能做正確與正則表達式單獨。

var m = navigator.userAgent.match(/Firefox\/(\d+)\./); 
if (m && m[1] > 3) { 
    // .... firefox 3 and above ... 
} 

注:至於爲什麼你不能只用正則表達式做正確,考慮火狐/ 10.0

+0

你可以這樣做只是_anything_與正則表達式,但這並不是一個好主意。你通常最終會遇到怪物。 – paxdiablo 2012-01-06 02:16:00

+2

@paxdiablo:實際上,你不能用正則表達式解析非正則語法(儘管我承認,上述情況並非非正規)。然而,你可以用Perl6的遞歸正則表達式來做任何事情(但我們不是在這裏討論Perl)。 – slebetman 2012-01-06 02:23:04

+0

我認爲這是最明智的解決方案,因爲我不想限制FF9的檢查。 – Yulia 2012-01-06 02:29:57

0

如果您正在使用jQuery我建議你看看:http://api.jquery.com/jQuery.browser/

+0

_您可能會建議,jQuery bods本身不會:「我們建議不要使用此屬性;請嘗試改爲使用功能檢測(請參閱jQuery.support)「。不過,這是一個很好的指針。 – paxdiablo 2012-01-06 02:12:28

+0

@paxdiablo是的,特徵檢測,不推薦,但對瀏覽器檢測它是確定: _「因爲$ .browser使用的navigator.userAgent確定平臺,它是由用戶或虛假陳述容易受到欺騙瀏覽器本身。最好儘可能避免使用特定於瀏覽器的代碼。** ** $ .support屬性可用於檢測對特定功能的支持,而不是依賴於$ .browser **「 – denysonique 2012-01-06 04:48:16

0

這個怎麼樣,比如:

navigator.userAgent.match(/Firefox\/[3456789]./) 
+0

Nice,但與的速度,Mozilla基金會正在增加它的版本數,這會持續大約一個星期半,當V10抵達:-) – paxdiablo 2012-01-06 02:11:24

1
navigator.userAgent.match(/Firefox\/([3-9]|\d\d)./) 
+0

這是更好,但仍然無法與Firefox 100工作:-) – paxdiablo 2012-01-06 02:25:15

3
navigator.userAgent.match(/Firefox\/([3-9]|\d{2,})./) 
0
if(/Firefox\/([^012]|\d{2,})\./i.test(navigator.userAgent)){ 
    // What you want to do 
} 

因爲你需要比賽,但你可以用正則表達式+一些代碼做所有Firefox除了版本0,1和2.

+0

再次,這是很好的個位數的版本,但它會拒絕的Firefox火狐10. 9之後,將工作的第一個是火狐33.即使Mozilla的瘋狂加速的版本號,這將需要一段時間:-) – paxdiablo 2012-01-06 03:10:52

+0

它不會拒絕10;加號是什麼意思? – 2012-01-06 03:30:01

+0

您可能想要重新考慮該語句,「+」適用於之前的模式,即「[^ 012]」。換句話說,它將允許任何字符中的一個或多個不是0,1或2.因此,10將會失敗,如11,12,...,32,40,41,42,1999999等等上。我可能是錯的,這不會是第一次,但我不這麼認爲。 – paxdiablo 2012-01-06 03:31:48