Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Expresión regular para enlaces magnet

Estas en el tema de Expresión regular para enlaces magnet en el foro de Javascript en Foros del Web. Hola a todos, tengo una duda que me gustaría que me ayudarais a resolver. Actualmente estoy usando un script que me pasaron para buscar enlaces ...
  #1 (permalink)  
Antiguo 28/02/2013, 18:59
Avatar de Adbane  
Fecha de Ingreso: junio-2011
Mensajes: 86
Antigüedad: 12 años, 10 meses
Puntos: 6
Pregunta Expresión regular para enlaces magnet

Hola a todos, tengo una duda que me gustaría que me ayudarais a resolver.

Actualmente estoy usando un script que me pasaron para buscar enlaces y hashtags en un campo, y convertirlos en enlaces de verdad añadiendoles un <a href=""> a cada uno.

El caso es que me gustaría hacer lo mismo con enlaces magnet, he probado varias expresiones regulares que he visto en stackoverflow, pero no logro que me funcionen, y buscando por la web, dificil encontrar algo relacionado con el tema.

A continuación os dejo mi script:
Código Javascript:
Ver original
  1. $('p').each(function(){
  2.         var str = $(this).html();
  3.         $(this).empty();
  4.         str = ' '+str;
  5.         str = str.replace(/((ftp|https?):\/\/([-\w\.]+)+(:\d+)?(\/([-\w/_\.]*(\?\S+)?)?)?)/gm,'<a href="$1">$1</a>');
  6.         str = str.replace(/([^[a-zA-Z0-9áéíóúÁÉÍÓÚüÜñÑ])\#([a-zA-Z0-9áéíóúÁÉÍÓÚüÜñÑ]+)/gm,'$1<a href="%23$2">#$2</a>');
  7.         $(this).append(str);
  8.     });

Aqui pongo como es la estructura de un enlace de ejemplo de un magnet (es de mentira, no la probeis):
magnet:?xt=urn:btih:asdfg12345lkjh9876&dn=Nombre-de-archivo.zip

Os dejo una información que encontré en un blog:
- magnet: como identificador del enlace en cuestión.
- xt=urn: como identificador de la red. Por ejemplo, para un enlace de BitTorrent tendríamos xt=urn:btih: y para uno de eDonkey sería xt=urn:ed2k:
- A continuación tendríamos el hash completo del archivo, el valor único que lo define.
- &dn= para el nombre del archivo, si se indicara.
Fuente

Sé que estoy pidiendo mucho, pero apenas me desenvuelvo con las expresiones regulares, y he probado varias formas basandome en el script que tengo para los enlaces, pero no logro dar en el clavo. Si pudieras ayudarme, os lo agradeceria.

Muchas gracias de antemano!
__________________
Diseñador web por amor al arte, o al HTML mejor dicho
  #2 (permalink)  
Antiguo 28/02/2013, 20:36
Avatar de ryugen
Colaborador
 
Fecha de Ingreso: agosto-2008
Ubicación: Rosario, Santa Fe
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 187
Respuesta: Expresión regular para enlaces magnet

De acuerdo a lo dicho, sin conocer tanto del tema, armaría la siguiente expresión regular:

Código Javascript:
Ver original
  1. magnet\:\?xt=urn\:\w+\:\w+(\&dn=[\w|\.|\-\_]+)?

Se la puede ver en funcionamiento acá (casos positivos y casos negativos):

Regex Tester
  #3 (permalink)  
Antiguo 28/02/2013, 21:30
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Expresión regular para enlaces magnet

@Adbane
Te diría que el formato de un magnet puede ser un poco más amplio que lo que señalas, por lo que habría que buscar una expresión más generíca
http://es.wikipedia.org/wiki/Magnet
SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #4 (permalink)  
Antiguo 01/03/2013, 17:47
Avatar de Adbane  
Fecha de Ingreso: junio-2011
Mensajes: 86
Antigüedad: 12 años, 10 meses
Puntos: 6
Respuesta: Expresión regular para enlaces magnet

Cita:
Iniciado por ryugen Ver Mensaje
De acuerdo a lo dicho, sin conocer tanto del tema, armaría la siguiente expresión regular:

Código Javascript:
Ver original
  1. magnet\:\?xt=urn\:\w+\:\w+(\&dn=[\w|\.|\-\_]+)?

Se la puede ver en funcionamiento acá (casos positivos y casos negativos):

Regex Tester
Cita:
Iniciado por emprear Ver Mensaje
@Adbane
Te diría que el formato de un magnet puede ser un poco más amplio que lo que señalas, por lo que habría que buscar una expresión más generíca
http://es.wikipedia.org/wiki/Magnet
SAludos
Hola a los dos, perdonad que no contestara antes, estuve todo el día sin internet.

A lo que ibamos. Estuve trabajando un poco y dí con una expresión regular algo engorrosa y rebuscada pero que en un principio me sirve para magnets sencillos. Pero claro, como comenta emprear, los magnets tienen formatos mucho más amplios, entre ellos hay magnets que incluyen enlaces http, lo cual hace que entre en conflicto con mi otra línea que utilizo para enlaces normales, haciendo que se mezclen magnets con url creando varios <a href>.

Código Javascript:
Ver original
  1. $('p').each(function(){
  2.     var str = $(this).html();
  3.     $(this).empty();
  4.     str = ' '+str;
  5.     str = str.replace(/((ftp|https?):\/\/([-\w\.]+)+(:\d+)?(\/([-\w/_\.]*(\?\S+)?)?)?)/gm,'<a href="$1">$1</a>');
  6.     str = str.replace(/(magnet:\?xt=urn:btih:(([\w\^\&\^;\%\=\-\.\:\/\/]*(\?\S+)?)?)?)/i,'<a href="$1">$1</a>');
  7.     str = str.replace(/([^[a-zA-Z0-9áéíóúÁÉÍÓÚüÜñÑ])\#([a-zA-Z0-9áéíóúÁÉÍÓÚüÜñÑ]+)/gm,'$1<a href="%23$2">#$2</a>');
  8.     $(this).append(str);
  9. });

Normalmente el error me lo da con magnets como este:
magnet:?xt=urn:btih:0bbfaaf5f469a2bd3d762f6942a302 f7014a35e9&tr.1=udp://tracker.ccc.de:80&tr.2=http://announce.torrentsmd.com:6969/announce&tr.3=http://announce.torrentsmd.com:8080/announce.php&tr.4=http://bttrack.9you.com/:8080/announce&tr.5=http://announce.torrentsmd.com:8080/announce&tr.6=http://bitflip.uni.cx:6969/announce&kt=http://www.bt2magnet.com

El problema ocurre cuando el each() llega hasta el primer "http", ahí termina el magnet y me genera un replace() para enlaces normales. La única solución que veo es hacerlo todo en una sola expresión regular, tanto enlaces http, como magnets, y ya de paso aquellos que empiecen por www.

Iré estudiandome un poco más a fondo las distintas estructuras que tiene un magnet, a ver si se me ocurre alguna idea...
__________________
Diseñador web por amor al arte, o al HTML mejor dicho

Etiquetas: enlaces, funcion, html, regular
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:47.