|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité régulier
![]() Inscription : avril 2009 Messages : 13 ![]() |
Bonjour,
Voilà j'aimerais (en JavaScript) remplacer toutes les urls par des liens <a href=...>...</a> Donc j'ai une epxression régulière pour capter les liens : Code :
Du coup j'aimerais changer l'expression régulière pour lui dire de ne pas traiter les liens s'il ya un '>' devant le http (donc quand l'url est déjà dans une balise <a href=...>...</a>). J'ai essayé ceci : Code :
Avez-vous une idée de comment faire une expression régulière qui fasse ce que je souhaite? Merci d'avance |
||||
|
|
00
|
|
|
#2 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 010 ![]() |
Code :
var replacePattern1 = /^[^>]\s*((https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
01
|
|
|
#3 |
|
Invité régulier
![]() Inscription : avril 2009 Messages : 13 ![]() |
Merci spacefrog, ça marche bien pour ne pas prendre les urls précédées de > comme :
>http://www.google.com Par contre ça ne prend plus non plus les url qui ne sont pas précédées du > comme : http://www.google.com (même avec des espaces devant ou derrière). Résultat des tests : http://awesomescreenshot.com/014dvli38 Donc retour à la case départ |
|
|
00
|
|
|
#4 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 010 ![]() |
arf ...évidemment,
et avec une assertion ? Code :
var replacePattern1 = /^(?!=>)\s*((https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : avril 2009 Messages : 13 ![]() |
Toujours pas
Je teste avec ceci : http://www.regular-expressions.info/...ptexample.html Et le met comme subject string celle ci : _http://www.google.be/_ (les _ étant en fait des espaces). Je commence à croire que c'est tout bonnement impossible... :s |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Je crois qu'il y a un problème de syntaxe avec ton assertion Spaffy. En plus, on peut pas regarder en arrière avec les assertions. Et pour ajouter au drame, on peut pas faire de référence arrière en JavaScript…
Moi je propose ça mais c'est pas parfait non plus : s'il y a une balise, même autre que <a>, autour du lien, il n'est pas traité… Code :
Sinon je pense que pour cibler précisément le problème, une regex ne suffira pas. Il faut scripter un peu autour…
__________________
Disposition de clavier ergonomique française : Bépo |
||
|
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Inscription : mai 2011 Messages : 14 ![]() |
Pourquoi dans ce cas ne pas plutôt exclure par la fin plutôt que par le début ? Ne pas autoriser "> après le href et </a> après le titre.
|
|
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : mai 2011 Messages : 14 ![]() |
C'est un problème assez commun il me semble. T'as regardé du côté de CodeS-SourceS & Cie ? Sinon un compromis c'est de faire un split au niveau des espaces du texte à traiter puis d'utiliser une expression régulière sur chaque chaîne et enfin d'assembler tout ce petit monde.
|
|
|
00
|
|
|
#9 | |||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Citation:
Moi je suis parti sur une autre idée : quand je tombe sur une url, que je détecte avec la regex, je rembobine jusqu'au dernier < avec lastIndexOf, et je détecte simplement si c'est une balise <a> ouvrante : Dans ce cas je ne fais rien. Dans tous les autres cas, je transforme l'url en lien. Avec cette méthode je considère à la fois les balises autres que <a> et les liens qui concernent une autre url rencontrée plus tôt (car il y aurait une balise fermante). Et voilà ce que ça donne : Code JS :
__________________
Disposition de clavier ergonomique française : Bépo |
|||
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : avril 2009 Messages : 13 ![]() |
Merci Watilin
Mais de nouveau je ne parviens pas à faire des match avec les urls valident sur le testeurs d'url que j'ai donné plus haut :s Tu l'a testée sur des liens toi? |
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Bien sûr, voilà mon jeu de tests :
Code JS :
Je pense qu'il faut retirer les / avec ton testeur.
__________________
Disposition de clavier ergonomique française : Bépo |
||
|
|
00
|
|
|
#12 | ||||||||||||
|
Invité régulier
![]() Inscription : avril 2009 Messages : 13 ![]() |
Ah bah en effet ce testeur n'est vraiment pas bon il déconne tout le temps, du coup je teste directement dans mon code maintenant
Mais bon je galère là, toujours des problèmes Avec ton code avec le lastIndexOf ça me retire carrèment les messages sans liens Et ça retire aussi ce qui suit le dernier lien bien souvent ^^Par contre pour ceci c'est pas mal bien qu'avec quelques bugs Code :
Donc voici ma fonction linkify : Code :
Exemple où seul le premier lien est transformé : Code :
Code :
Exemple où tous les liens sont prit en comptes, mais où les m du .com ne sont pas repris dans l'url : Code :
Et un petit dernier qui n'est de nouveau pas complet au niveau du lien : Code :
Sinon ce qui est génial c'est qu'il ne traite pas les liens déjà existant ça c'est vraiment parfait, mais ce qu'il faudrait c'est qu'il traite bien les url qu'il trouve :s Je suis vraiment hors jeu pour ce niveau de Regex ^^ |
||||||||||||
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Oups. J'avais bêtement oublié de traiter la fin de la chaîne dans mon code. C'est corrigé !
![]() Pour la version que tu as choisie, et les tests que tu as faits, je vois trois cas : 1– les liens se suivent. Les parties $1 et $4 de la regex se chevauchent d'un lien à l'autre, du coup le second passe à la trappe. On va s'en sortir avec la proposition de ohnomorejmmings : utiliser une assertion à la fin. 2– Pour les liens qui ne commence pas par http, c'est normal qu'ils ne soient pas transformés, c'était déjà le comportement de ta regex de départ. 3– le dernier caractère est oublié. Ça arrive aux fins de ligne : le moteur de regex doit trouver un caractère qui correspond à [^<>"'\s], or il n'y en plus dans la ligne, alors il en grignote un de l'url. Pour corriger ça il suffit de rajouter un point d'interrogation. Ça plus d'autres problèmes, par exemple un texte qui commence par un lien, ça donne une regex comme ça : Code regex :
/((?:^|[^<>"'])\s*)((https?):\/\/[-\w+&@#\/%?=~|!:,.;]*[-\w+&@#\/%=~|])(?=\s*[^<>"'\s]?)/gim Code JS :
return inputText.replace(replacePattern1, '$1<a href="$2" target="_blank">$2</a>');
__________________
Disposition de clavier ergonomique française : Bépo |
|
|
00
|
|
|
#14 |
|
Invité régulier
![]() Inscription : avril 2009 Messages : 13 ![]() |
Et bien sérieusement je ne pensais pas que c'était faisable je ne sais pas comment te remercier Watilin
J'ai testé tout mes cas et bien d'autres et n'ai rencontré aucun problème ![]() Pour les liens qui commencent par www. j'avais oublié que c'était voulu, seuls ceux qui ont http seront transformés. Donc voilà je pense que c'est désormais réglé, un tout tout grand merci à tout le monde pour votre aide elle fut vraiment précieuse! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com