Regex convertit l'URL en liens

J'ai emprunté un regex à partir de ce site: http://daringfireball.net/2010/07/improved_regex_for_matching_urls qui est presque complet mais je veux faire correspondre example.com
Je sais que stackoverflow n'est pas doyourhomework.com mais j'ai passé longtemps à penser sans résultats. Voici une violon à tester: http://jsfiddle.net/BGnMm/25/ et vous pouvez voir à la fin que exemple.com n'est pas un lien.

var reg=/\b((?:[az][\w-]+:(?:\/*)|www\d{0,3}[.]|[a-z0-9.\-]+[.][az]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”'']))/gi; var allurl="http:foo.com/blah_blah http://foo.com/blah_blah/ (Something like http://foo.com/blah_blah) http://foo.com/blah_blah_(wikipedia) http://foo.com/more_(than)_one_(parens) (Something like http://foo.com/blah_blah_(wikipedia)) http://foo.com/blah_(wikipedia)#cite-1 http://foo.com/blah_(wikipedia)_blah#cite-1 http://foo.com/unicode_(✪)_in_parens http://foo.com/(something)?after=parens http://foo.com/blah_blah. http://foo.com/blah_blah/. <http://foo.com/blah_blah> <http://foo.com/blah_blah/> http://foo.com/blah_blah, http://www.extinguishedscholar.com/wpglob/?p=364. http://✪df.ws/1234 rdar://1234 rdar:/1234 x-yojimbo-item://6303E4C1-6A6E-45A6-AB9D-3A908F59AE0E message://%[email protected]%3e http://➡.ws/䨹 www.c.ws/䨹 <tag>http://example.com</tag> Just a www.example.com link. http://example.com/something?with,commas,in,url, but not at end What about <mailto:[email protected]?subject=TEST> (including brokets). mailto:[email protected] bit.ly/foo “is.gd/foo/” WWW.EXAMPLE.COM http://www.asianewsphoto.com/(S(neugxif4twuizg551ywh3f55))/Web_ENG/View_DetailPhoto.aspx?PicId=752 http://www.asianewsphoto.com/(S(neugxif4twuizg551ywh3f55)) http://lcweb2.loc.gov/cgi-bin/query/h?pp/horyd:@field(NUMBER+@band(thc+5a46634)) 6:00p filename.txt http://example.com/quotes-are-“part” ✪df.ws/1234 example.com example.com/"; document.write(allurl.replace(reg,"<a href='$1' >$1</a><br />")); 

Ajoutez un opérateur d'alternance ( | ) après le {2,4}\/ , c'est-à-dire

  var reg=/\b((?:[az][\w-]+:(?:\/*)|www\d{0,3}[.]|[a-z0-9.\-]+[.][az]{2,4}\/|)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”'']))/gi; 

Il y a quelque chose que vous devriez comprendre à ce sujet. Le premier groupe non capturé, (?: … ) , recherche les "indicateurs" des URL. Un indicateur, par exemple, est le www (suivi de jusqu'à 3 chiffres). Cependant, vous demandez un moyen d'identifier les URL sans aucun indicateur . Donc, ce que nous avons fait plus haut, nous avons ajouté une clause, " ou une correspondance vide ", comme un indicateur "valide". La conséquence de cela est que votre expression régulière est moins sélective maintenant: toutes sortes de chaînes, pas seulement example.com, mais aussi le nom de fichier.txt , 3.141593 et omg ... sont vraiment identifiés comme des URL! Votre seule autre option (facilement disponible) est d'être plus sélective au sujet des suffixes, par exemple requiert des suffixes spécifiques ( com|org|net ), mais cela enlève la généralité du regex original, qui ne spécifie aucun suffixe .

En d'autres termes, vous êtes probablement confronté à une limitation de la logique, non à une limitation des compétences en écriture regex ou à la langue regex elle-même.

Veuillez vérifier si

 var reg=/\b((?:[az][\w-]+:(?:\/*)|(?:www\d{0,3}[.])|[a-z0-9.\-]+[.][az]{2,4}\/{0,1})(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))*(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”'']))/gi; 

Convient à vos besoins. Www (anyNumber) vient d'être mis à apparaître une ou zéro fois. Désolé pour la première réponse, je n'ai pas remarqué les textes.