¡Mantenlo simple! Di lo que no puedes tener, en lugar de lo que puedes tener :)
Como se mencionó anteriormente, las URL pueden ser bastante complejas, especialmente después del '?', Y no todas comienzan con un 'www'. p.ejmaps.bing.com/something?key=!"£$%^*()&lat=65&lon&lon=20
Entonces, en lugar de tener una expresión regular compleja que no cumpla con todos los casos límite, y será difícil de mantener, ¿qué tal este mucho más simple, que funciona bien para mí en la práctica?
Partido
http(s):// (anything but a space)+
www. (anything but a space)+
Donde 'cualquier cosa' es [^'"<>\s]
... básicamente una coincidencia codiciosa, llevándote a un espacio, una cita, un ángulo o un final de línea
También:
Recuerde verificar que aún no esté en formato URL, por ejemplo, el texto contiene href="..."
osrc="..."
Añadir ref = nofollow (si corresponde)
Esta solución no es tan "buena" como las bibliotecas mencionadas anteriormente, pero es mucho más simple y funciona bien en la práctica.
if html.match( /(href)|(src)/i )) {
return html; // text already has a hyper link in it
}
html = html.replace(
/\b(https?:\/\/[^\s\(\)\'\"\<\>]+)/ig,
"<a ref='nofollow' href='$1'>$1</a>"
);
html = html.replace(
/\s(www\.[^\s\(\)\'\"\<\>]+)/ig,
"<a ref='nofollow' href='http://$1'>$1</a>"
);
html = html.replace(
/^(www\.[^\s\(\)\'\"\<\>]+)/ig,
"<a ref='nofollow' href='http://$1'>$1</a>"
);
return html;
URL regexp from Component
que no se comente, sería útil alguna explicación de lo que está haciendo.Autolinker.js
se comenta muy bien y tiene pruebas. Laurlize.js
biblioteca vinculada a la respuesta de Vebjorn Ljosa también parece funcional y bien mantenida, aunque no tiene pruebas.