me encontré con esta expresión regular en el código fuente de jQuery:¿Qué agrega esta parte de expresión regular?
...
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
...
me preguntaba por qué era bastante complicado. Estoy especialmente interesado en la razón detrás de la segunda parte:
(?:.*? rv:([\w.]+))?
hice algunas investigaciones, pero no pude averiguar lo que esta parte de la expresión regular agrega.
(?:) 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
Particularmente, la última ?
no tiene mucho sentido para mí. La segunda parte completa coincide si existe o no una subcadena tal como se define en esa segunda parte. Con un poco de ensayo y error no parece la expresión regular a diferir de simplemente:
/(mozilla)/
Podría alguien arrojar alguna luz sobre lo que se supone que la segunda parte de la expresión regular para hacer? ¿Qué lo restringe? ¿Qué cadena falla que pasa /(mozilla)/
o al revés?
Sospecho que es trabajar en torno a algunos navegadores Mozilla falsificar poniéndolo en su cadena de agente de usuario. –
¿Puedes proporcionar un poco más de contexto? ¿Esto era parte de un plugin jQuery? ¿Si es así, Cuál? Saber dónde aparece este código podría arrojar algo de luz sobre/por qué/el autor quería este patrón en particular y, por lo tanto, qué está haciendo el patrón. – jefflunt
@Rafe Kettler: No estoy seguro de que te haya entendido correctamente. ¿Qué agrega la expresión regular para evitar falsificadores? – pimvdb