2009-08-10 12 views
0

J'ai une chaîne:version du navigateur Regex correspondance

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) 

Je veux savoir quelle version de Firefox est dans la chaîne (3.5.2).

Mon regex actuelle est:

Firefox\/[0-9]\.[0-9]\.[0-9] 

et il retourne Firefox/3.5.2

Je veux seulement qu'il revienne 3.5.2 de la version Firefox, pas les autres versions de la chaîne. Je sais déjà que le navigateur est Firefox.

Répondre

2
(?<=Firefox/)\d+(?:\.\d+)+ 

retournera comme le match 3.5.2 entier (en utilisant lookbehind - qui ne sont pas disponibles dans toutes les saveurs regex, cependant, en particulier JavaScript). Donc, s'il doit être JavaScript, recherchez Firefox/(\d+(?:\.\d+)+) et utilisez le numéro de correspondance. 1.

Comme en théorie il pourrait y avoir plus d'un chiffre (disons, la version 3.10.0), j'ai aussi changé cette partie de l'expression régulière, en tenant compte d'un ou plusieurs chiffres pour chaque nombre. En outre, il n'est pas nécessaire d'échapper à la barre oblique.

+0

Cela échoue maintenant' Firefox/46.0' –

+0

@JasonAxelson: Merci pour rende compte - au cours des sept dernières années, le schéma de nommage pour les versions de Firefox semble avoir changé ... –

1
Firefox\/([0-9]\.[0-9]\.[0-9]) 

et cependant extrait # 1 match de, cela se fait dans votre (non spécifié, si on soupçonne JavaScript) moteur regex. Ou, si cela est très gênant pour le faire, et votre regex prend en charge lookbehind:

(?<=Firefox\/)[0-9]\.[0-9]\.[0-9] 
1

Firefox\/([0-9]\.[0-9]\.[0-9]) 

En fonction de votre langue (je suppose js) ce sera le deuxième élément du tableau

-à-dire


var regex = /Firefox\/([0-9]\.[0-9]\.[0-9])/ 
var matches = useragent.match(regex); 
alert(matches[1]); // 3.5.2 
+0

d'oh MANQUÉ par beaucoup: P – rezzif

+0

Cela échoue maintenant 'Firefox/46.0' –

2
Firefox\/([0-9]\.[0-9]\.[0-9]) 

Créer un groupe de capture autour des chiffres comme je l'ai fait ci-dessus avec le(). Ensuite, l'expression régulière que vous voulez sera dans le 2ème index du tableau qui est retourné. par exemple, pour zéro langues à base matchedArray [1] et ou 1 langues sur la base de son matchedArray [2]

0

Parfois, l'agent utilisateur contient également des caractères, par exemple:

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b9pre) Gecko/20101228 Firefox/4.0b9pre 

Internet Explorer est le seul autre navigateur où je l'ai vu les personnages dans le cadre de l'information de version:

Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0 ; .NET CLR 2.0.50215; SL Commerce Client v1.0; Tablet PC 2.0 

En outre, il peut y avoir des chaînes d'agent utilisateur Firefox avec seulement deux chiffres de version comme celui-ci:

Mozilla/5.0 (X11; U; Linux armv7l; en-US; rv:1.9.2a1pre) Gecko/20091127 Firefox/3.5 Maemo Browser 1.5.6 RX-51 N900 

Sur cette base, je suis venu avec ce modèle regex:

Firefox\/([\d]+\.[\w]?\.?[\w]+) 

Il correspond à tout numéro de version avec 2-3 niveaux et numéros> 10 mais permettent aussi des personnages du 2e ou 3e niveau.

Questions connexes