Expression régulière pour les Urls
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:
1 2
| var replacePattern1 = /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
var replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>'); |
Seulement le problème c'est que si une url est déjà dans un lien il la capte quand même.
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:
1 2
| var replacePattern1 = /^[^>](\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
var replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>'); |
Du coup il ne traite plus les url qui sont déjà dans un lien <a> mais par contre il ne traite plus non plus les url qui ne sont pas sous forme de lien <a> :'(
Avez-vous une idée de comment faire une expression régulière qui fasse ce que je souhaite?
Merci d'avance :)
Prendre le taureau par la queue
Citation:
Envoyé par
Watilin
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…
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.
Exemple de code et méthode alternative
Citation:
Envoyé par
scriptiz
Voilà j'aimerais (en JavaScript) remplacer toutes les urls par des liens <a href=...>...</a>
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.