Pregunta

Tengo una cadena:

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)

Quiero saber qué versión de Firefox en la cadena (3.5.2).

Mi actual regex es:

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

y devuelve Firefox/3.5.2

Sólo quiero que regrese 3.5.2 a partir de la versión de Firefox, no las otras versiones en la cadena.Ya sé que el navegador es Firefox.

¿Fue útil?

Solución

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

devolverá 3.5.2 como todo el partido (usando búsqueda hacia atrás - que no está disponible en todos los sabores de expresiones regulares, sin embargo, especialmente JavaScript).

Por lo tanto, si tiene que ser JavaScript, buscar y utilizar Firefox/(\d+(?:\.\d+)+) coincide con ninguna. 1.

Dado que, en teoría, podría haber más de un dígito (por ejemplo, la versión 3.10.0), también he cambiado esa parte de la expresión regular, lo que permite una o más dígitos para cada número. Además, no hay necesidad de escapar de la barra.

Otros consejos

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

Crear una captura de grupo alrededor de los números, como lo he hecho anteriormente con el ().A continuación, el regex desea que será en la 2ª índice en la matriz de la que se devuelve.e.g a cero los lenguajes basados en matchedArray[1] y o 1 idiomas basados en su matchedArray[2]

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

y extraer partido # 1, sin embargo esto se hace en su (no especificado, aunque uno sospecha JavaScript) motor de expresiones regulares. O bien, si esto es muy molesto para hacer, y su expresión regular de búsqueda hacia atrás compatible con:

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

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

Dependiendo de su idioma (Asumo js) que va a ser el segundo elemento de la matriz

es decir.


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

A veces, el agente de usuario también contiene caracteres, por ejemplo:.

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

Internet Explorer es el único otro navegador donde he visto los personajes como parte de la información de versión:

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

Además, no puede haber Firefox cadenas de agente de usuario con sólo dos dígitos versión como ésta:

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

Con base en esa me ocurrió con este patrón de expresión:

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

coincidirá con cualquier número de versión con 2-3 niveles y números> 10 sino que también permiten caracteres en la segunda o tercera nivel.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top