2010-06-25 3 views
3

J'essaie de faire de '@sometext' un lien HTML où 'sometext' est aussi ajouté à une URL. c'est-à-dire '@sometext' devient un lien vers 'http://someurl.com/sometext'. Mais cela peut changer parce que le lien sera différent à chaque fois en fonction de ce qu'est un «sometext». J'écris ceci dans javascript et jquery. J'essaie de recréer des liens similaires à ceux sur Twitter lorsque quelqu'un insère un @username qui renvoie à la page de profil de cette personne.Comment puis-je remplacer un mot dans une chaîne commençant par un symbole '@' comme Twitter, en Javascript/JQuery?

J'ai déjà du code pour localiser les URL dans le texte et les rendre des liens HTML. Mais je n'ai rien écrit pour ce que j'essaye de faire maintenant avec le symbole '@'. Je n'ai pas été capable de trouver quelque chose pour m'aider.

C'est le code que je dois faire urls des liens HTML:

var message = this.text; 

var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi; 

message = message.replace(exp,"<a href='$1' target='_new'>$1</a>"); 

resultDiv += message + "</div>"; 

Bon alors voici comment mon code ressemble maintenant et il fonctionne, sauf que pour certains des liens @sometext il y a un « : 'suivant directement la chaîne, @sometext: et donc le lien est un lien brisé. Comment puis-je supprimer ou ignorer le ':' lors de la création de l'URL pour être le lien HTML?

$(data.results).each(function() { 

var userLink = "<a href=\"http://twitter.com/" + this.from_user + "\">"; 

var replyTo = this.to_user; 

var resultDiv = "<div class=\"finalResult\">"; 

resultDiv += "<fieldset class=\"tweetReturn\" style = \"width: 75%;\">"; 

resultDiv += "<div><div id=\"userImage\"><img src=\"" + this.profile_image_url + "\" height=\"48px\" width=\"48px\"/></div>"; 

resultDiv += "<div id=\"userMessage\"><strong>" + userLink + this.from_user + "</a></strong> &nbsp;"; 

var message = this.text; 

var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi; 

message = message.replace(exp,"<a href='$1'>$1</a>"); 

message = message.replace(/(^|\s)@(\S+)/g, '[email protected]<a href=\"http://twitter.com/$2\">$2</a>');            
message = message.replace(/(^|\s)#(\S+)/g, '$1<a href=\"http://search.twitter.com/search?q=%23\$2\">#$2</a>'); 

resultDiv += message + "</div>"; 

resultDiv += "<div id=\"twitterLink\"><a href=\"http://www.twitter.com\"><img src=\"http://twitter-badges.s3.amazonaws.com/twitter-b.png\" alt=\"Visit Twitter\"/></a></div>" 

resultDiv += "<div id=\"timestamp\">" + this.created_at + "</div>"; 

resultDiv += "</div></div></fieldset>"; 

resultDiv += '</div><br />'; 


$("#displayResults").append(resultDiv);  

}); 
+0

Bienvenue dans stackoverflow. Pouvez-vous poster le code que vous avez actuellement, afin que nous puissions voir ce que vous essayez de faire et essayer de comprendre ce qui ne va pas? Vous trouverez ce code d'aide aide les gens à vous aider. – Oded

Répondre

1

Je devine que vous voulez quelque chose comme ceci:

function makeLinks(text) 
{ 
    text = text.replace(/@(\w+)\b/, '<a href="http://www.someurl.com/$1">@$1</a>'); 
    return text; 
} 
1

Cela devrait fonctionner

function convertAts(text) 
{ 
    return text.replace(/(^|\s)@(\S+)/g, '$1<a href="http://someurl.com/$2">@$2</a>'); 
} 

Cela ne remplacera @something quand il est seul et non juste à côté d'autre chose (par exemple [email protected])

2

Paiement this entry par l'ingénieur Twitter Dustin Diaz pour relier les liens, @ messages, et les hachages.

var ify = function() { 
    return { 
    "link": function(t) { 
     return t.replace(/(^|\s+)(https*\:\/\/\S+[^\.\s+])/g, function(m, m1, link) { 
     return m1 + '<a href=' + link + '>' + ((link.length > 25) ? link.substr(0, 24) + '...' : link) + '</a>'; 
     }); 
    }, 
    "at": function(t) { 
     return t.replace(/(^|\s+)\@([a-zA-Z0-9_]{1,15})/g, function(m, m1, m2) { 
     return m1 + '@<a href="http://twitter.com/' + m2 + '">' + m2 + '</a>'; 
     }); 
    }, 
    "hash": function(t) { 
     return t.replace(/(^|\s+)\#([a-zA-Z0-9_]+)/g, function(m, m1, m2) { 
     return m1 + '#<a href="http://search.twitter.com/search?q=%23' + m2 + '">' + m2 + '</a>'; 
     }); 
    }, 
    "clean": function(tweet) { 
     return this.hash(this.at(this.link(tweet))); 
    } 
    }; 
}(); 
Questions connexes