2010-11-09 26 views
5

Tengo una expresión regular existente:Twitter URL estado de expresiones regulares

/^http:\/\/twitter\.com\/(\w+)\/status(es)*\/(\d+)$/ 

que utilizo para determinar si una URL es una dirección URL actualización de estado twitter. P.ej.

http://twitter.com/allWPthemes/status/2040410213974016 

Pero desde que la "nueva" Twitter salió, que han cambiado de estado de la URL para parecerse a:

http://twitter.com/#!/allWPthemes/status/2040410213974016 

con el añadido/#!

Entonces mi pregunta es: ¿Cómo puedo modificar mi expresión regular para que coincida con ambas URL?

Mi intento fallido final fue:

^http:\/\/twitter\.com\/(#!\/w+|\w+)\/status(es)*\/(\d+)$ 

Respuesta

8

Prueba esto: /^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(es)?\/(\d+)$/

Esto corresponderá con ambas las direcciones URL original y la nueva URL hash tag.

Si lo que desea es para que coincida con las nuevas direcciones URL, esto debe hacerlo: /^https?:\/\/twitter\.com\/#!\/(\w+)\/status(es)?\/(\d+)$/

+0

Este se encargará de 'https' direcciones URL así:'^http (s)? : \/\/twitter \ .com \/(?: #! \ /)? (\ w +) \/status (es)? \/(\ d +) $ ' – iTurki

2

Su solución es bastante estrecha. Usted puede simplemente añadir el #!/ como un elemento opcional de la siguiente manera:

(#!\/)? 

así, el texto completo se vería así:

/^http:\/\/twitter\.com\/(#!\/)?(\w+)\/status(es)*\/(\d+)$/ 
2

Ewww! ☺ No utiliza barras como el delimitador de expresiones recíprocas cuando tienes barras internas que por lo tanto necesitarían backwhacking. De lo contrario, obtienes un LTS repulsivo (Síndrome de palmadita inclinada) y un caso infeccioso de barba backslashitis.

Algo como esto es mucho mejor:

 
    m!http://twitter.com/(#!/)?\w+/status(es)?/(\d+)$! 

o

 
    m{http://twitter.com/(#!/)?\w+/status(es)?/(\d+)$} 

o si no es necesario para capturar porciones:

 
    m{http://twitter.com/(?:#!/)?\w+/status(?:es)?/(?:\d+)$} 

o si desea realizar es legible:

 
    m{ http:// twitter.com/(\x23 ! /)? \w+/status (es)?/(\d+) $ }x 

que es aún mejor sería cuando se rompe a través de múltiples líneas para que puedas comentar que:

 
    m{ 
      http: 
     // twitter.com 
     /(\x23 ! /)?  # optional new "#!" element 
      \w+ 
     /status (es)?   # one or more statuses 
     /(\d+) 
      $ 
    }x 
+0

gracias - esto también funcionó – vinnie

+0

vinnie, me alegro de oírlo. – tchrist

0

@ Kevin respuesta del actualizan.

^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)(?:\/.*)?$ 

Partidos ambos:

https://twitter.com/someone/status/866002913604149248 
https://twitter.com/someone/status/857179125076963329/video/1 

Puede ejecutarlas por sí mismo aquí:

https://regex101.com/r/mNsp3o/3

Cuestiones relacionadas