match de version du navigateur regex
-
12-09-2019 - |
Question
J'ai une chaîne:
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 connais déjà le navigateur est Firefox.
La solution
(?<=Firefox/)\d+(?:\.\d+)+
sera de retour comme le match 3.5.2 entier (en utilisant lookbehind - qui ne sont pas disponibles dans toutes les saveurs regex, mais, surtout JavaScript).
Alors, si elle doit être JavaScript, recherchez Firefox/(\d+(?:\.\d+)+)
et Ressemblance pas. 1.
Comme en théorie il pourrait y avoir plus d'un chiffre (par exemple, la version 3.10.0), je l'ai également changé cette partie de l'expression régulière, permettant un ou plusieurs chiffres pour chaque numéro. En outre, il n'y a pas besoin d'échapper à la barre oblique.
Autres conseils
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 rationnelle que vous voulez sera dans le 2ème indice dans le tableau retourné. par exemple pour les langues à base zéro matchedArray [1] et 1 ou langues basées son matchedArray [2]
Firefox\/([0-9]\.[0-9]\.[0-9])
et extraire correspondance n ° 1, mais 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]
Firefox\/([0-9]\.[0-9]\.[0-9])
En fonction de votre langue (je suppose js) ce sera le deuxième élément du tableau
i.e..
var regex = /Firefox\/([0-9]\.[0-9]\.[0-9])/
var matches = useragent.match(regex);
alert(matches[1]); // 3.5.2
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 Firefox chaînes d'agent utilisateur avec seulement deux chiffres de version comme celle-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 à aucun numéro de version avec 2-3 niveaux et numéros> 10 mais permettent aussi des personnages dans le 2ème ou 3ème niveau.