¿Cómo extraer una URL de un Tweet con un RegEx de JavaScript?

Suponiendo que tengo el tweet almacenado como una cadena en una variable JS …

¿Cómo extraer una URL de un tweet con un RegEx de JavaScript?

Esto debería ser mucho más fácil que extraer una URL de una cadena, porque:

Supondré que todo lo que comienza con http o www y termina con un espacio en blanco (o fin de tweet) es una URL.

Esta es una de las expresiones regulares que he usado para extraer enlaces de los estados de Twitter.

Patrón de coincidencia de enlace

(?:<\w+.*?>|[^=!:'"/]|^)((?:https?://|www\.)[-\w]+(?:\.[-\w]+)*(?::\d+)?(?:/(?:(?:[~\w\+%-]|(?:[,.;@:][^\s$]))+)?)*(?:\?[\w\+%&=.;:-]+)?(?:\#[\w\-\.]*)?)(?:\p{P}|\s|<|$) 

Alternativamente, si controla cómo se obtienen los estados de Twitter, puede pasar el parámetro include_entities a statuses / show (o cualquier otro método que lo admita, como statuses / user_timeline ) para que Twitter rompa los enlaces, menciones y hashtags. Para ti, como el siguiente:

http://api.twitter.com/1/statuses/show/23918022347456512.json?include_entities=true

En el JSON resultante, observe el objeto de las entidades .

 "entities":{"urls":[{"expanded_url":null,"indices":[27,53],"url":"http:\/\/tinyurl.com\/38wp7nt"}],"hashtags":[],"user_mentions":[]} 

Ahora, puede hacer referencia a los datos devueltos por Twitter en lugar de tener que analizarlos usted mismo. Lo mejor de este enfoque es que descarga el trabajo a Twitter, y nunca tiene que preocuparse de que su expresión regular coincida exactamente con la de Twitter.

 var stringToCheck = "http://www.something"; stringToCheck.match(/^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$/); // returns true if stringToCheck is a URL 

Esto buscará TLD de dos o 3 letras y cuentas para subdominios.