Rester simple! Dites ce que vous ne pouvez pas avoir plutôt que ce que vous pouvez avoir :)
Comme mentionné ci-dessus, les URL peuvent être assez complexes, surtout après le «?», Et toutes ne commencent pas par un «www». par exemplemaps.bing.com/something?key=!"£$%^*()&lat=65&lon&lon=20
Donc, plutôt que d'avoir une expression rationnelle complexe qui ne répondra pas à tous les cas extrêmes, et sera difficile à maintenir, que diriez-vous de celle beaucoup plus simple, qui fonctionne bien pour moi dans la pratique.
Rencontre
http(s):// (anything but a space)+
www. (anything but a space)+
Où `` n'importe quoi '' est [^'"<>\s]
... fondamentalement une allumette gourmande, vous amenant à rencontrer un espace, un devis, un support d'angle ou une fin de ligne
Aussi:
N'oubliez pas de vérifier qu'il n'est pas déjà au format URL, par exemple le texte contient href="..."
ousrc="..."
Ajouter ref = nofollow (si approprié)
Cette solution n'est pas aussi "bonne" que les bibliothèques mentionnées ci-dessus, mais elle est beaucoup plus simple et fonctionne bien dans la pratique.
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
ne soit pas commenté, une explication de ce qu'il fait serait utile.Autolinker.js
est très bien commenté et a des tests. Laurlize.js
bibliothèque liée à dans la réponse de Vebjorn Ljosa semble également fonctionnelle et bien entretenue, même si elle n'a pas de tests.