2013-07-27 1 views
1

J'essaie de créer une fonction autolink en javascript qui transforme automatiquement les URL en liens pendant que l'utilisateur tape (ContentEditable div).javascript url autolink mais éviter la récursivité

J'utilise cette expression rationnelle:

var text = 'Some text containing URLs'; 
var exp = /(\b(http):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
var newtext = text.replace(exp,"<a href='$1'>$1</a>"); 

Le code ci-dessus fonctionne très bien, mais parce que le code est appelé à chaque fois qu'un utilisateur tape, récursivité se produit:

<a href='<a href='<a href=' etc. 

Comment puis-je éviter que cela passe-t-il alors que le script met toujours à jour le texte en tant qu'utilisateur?

La question est donc (merci @putvande): comment puis-je vérifier si une URL ne contient pas déjà:

<a href='... 

(je ne suis pas vraiment à portée de main avec regex)

+0

Vous devez vérifier auprès de votre Regex s'il y a déjà des balises '' dans votre code . – putvande

+1

J'ai trouvé une solution non-regex à mon problème, avant que la fonction regex je dépouille tous les tags. Voir mon violon jsfiddle.net/gerbenzomp/UJMeR/3 Peut-être pas la solution la plus élégante, donc je suis toujours très intéressé par une solution exclusivement regex. – Gerben

+0

Hay @Gerben avez-vous résolu cela? J'ai besoin d'une solution dans ce travail – dhee

Répondre

0

Vous pouvez correspond uniquement aux modèles d'URL qui ne sont pas préfixés par un > ou un '. Bien que cela ne soit pas infaillible à 100%, il devrait être assez bon pour vous aider à démarrer.

function urlify(text) { 
    var exp = /^\>(\b(http):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
    return text.replace(exp,"<a href='$1'>$1</a>"); 
} 

En appelant:

urlify('Some text http://example.com containing URLs'); 

retours "Some text <a href='http://example.com'>http://example.com</a> containing URLs"

urlify("Some text <a href='http://example.com'>http://example.com</a> containing URLs"); 

retours "Some text <a href='http://example.com'>http://example.com</a> containing URLs"

+0

J'ai essayé votre solution, mais pour une raison quelconque, il ne fait rien – Gerben

+1

@Gerben le paramètre de la fonction utilise "test", mais la fonction utilise "texte" comme variable. J'ai soumis une modification pour corriger cela. –

+1

@ S.Walker - Merci pour le montage. :) – techfoobar

Questions connexes