2010-06-25 2 views
3

Я пытаюсь сделать любой «@sometext» ссылкой HTML, где «sometext» также добавлен к URL-адресу. т. е. '@sometext' становится ссылкой на 'http://someurl.com/sometext'. Но это может измениться, потому что связь будет различной каждый раз в зависимости от того, что такое «sometext». Я пишу это в javascript и jquery. Я пытаюсь воссоздать ссылки, похожие на те, что есть в Twitter, когда кто-то вставляет имя @username, которое ссылается на страницу профиля этого человека.Как заменить любое слово в строке, начинающейся с символа '@', например, Twitter, в Javascript/JQuery?

У меня уже есть код для поиска URL-адресов в тексте и создания ссылок HTML. Но у меня нет ничего написанного для того, что я пытаюсь сделать теперь с символом «@». Я не смог найти ничего, чтобы помочь мне.

Это код, который я должен сделать URLS 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>"; 

Хорошо, так это то, как мой код выглядит сейчас, и это работает, за исключением, что для некоторых из @sometext ссылок Существует «: 'непосредственно после строки, @sometext: и, следовательно, ссылка является неработающей ссылкой. Как я могу удалить или проигнорировать «:» при создании URL-адреса в качестве ссылки 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

Добро пожаловать в stackoverflow. Можете ли вы опубликовать код, который у вас есть сейчас, чтобы мы могли видеть, что вы пытаетесь сделать, и попытаться выяснить, что происходит? Вы обнаружите, что код публикации помогает людям помочь вам. – Oded

ответ

1

Я предполагаю, что Вы хотите что-то вроде этого:

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

Это должно работать

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

Это будет только заменить @something, когда он один, а не рядом с чем-то еще (например, [email protected])

2

Оформить заказ this entry инженером Twitter Дастином Диасом для связывания ссылок, @ сообщений и хешей.

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))); 
    } 
    }; 
}(); 
Смежные вопросы