2013-04-16 2 views
0

Я нашел этот JS скрипта здесь на так, что кажется, как он будет работать отлично подходит для обнаружения как обычных ссылок и Twitter #hashtags и @usernames:Javascript Regex для Удаления Http: // и https: // из текста

function processTweetLinks(text) { 
    text = text.replace(); 
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i; 
    text = text.replace(exp, "<a href='$1' target='_blank'>$1</a>"); 
    exp = /(^|\s)#(\w+)/g; 
    text = text.replace(exp, "$1<a href='http://search.twitter.com/search?q=%23$2' target='_blank'>#$2</a>"); 
    exp = /(^|\s)@(\w+)/g; 
    text = text.replace(exp, "$1<a href='http://www.twitter.com/$2' target='_blank'>@$2</a>"); 
    console.log(text); 
} 

НО ... Первое выражение не совсем соответствует моим потребностям ... Когда он получает что-то вроде http://google.com, он выводит <a href='http://google.com' target='_blank'>http://google.com</a>. Я хочу, чтобы он выводил <a href='http://google.com' target='_blank'>google.com</a> вместо этого - в основном удалял http:// или https:// изнутри якорных меток. Я не знаю регулярное выражение - что бы функция должна была выглядеть, чтобы вывести это?

UPDATE: Я получил функцию, исправленную с ответом @ BrunoFinelli, который отлично работает, но я не знаю, как исправить несколько ссылок в заданной строке/сообщении. Прямо сейчас он исправляет только каждый раз, когда я вызываю функцию ... Если кто-то может настроить функцию, чтобы исправить это, что было бы очень признательно! Благодаря! Было бы также неплохо, если бы первое регулярное выражение (тот, о котором идет речь) удалил www., а также изнутри привязанных тегов? Но на самом деле мне просто нужно знать, как это повторить через твит, который может иметь более одного ссылки/упоминания/хэштег. Благодаря!

ответ

3

Попробуйте это:

function processTweetLinks(text) { 
     text = text.replace(); 
     var exp = /(\b(https?|ftp|file):\/\/)([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i; 
     text = text.replace(exp, "<a href='$1$3' target='_blank'>$3</a>"); 
     exp = /(^|\s)#(\w+)/g; 
     text = text.replace(exp, "$1<a href='http://search.twitter.com/search?q=%23$2' target='_blank'>#$2</a>"); 
     exp = /(^|\s)@(\w+)/g; 
     text = text.replace(exp, "$1<a href='http://www.twitter.com/$2' target='_blank'>@$2</a>"); 
     console.log(text); 
    } 
+0

Только что попробовал, и она работала правильно ... 'processTweetLinks ('HTTP : //google.com ') 'yields' google.com ' –

+0

Да, это прекрасно! Ничего страшного в том, что мои новички не видят! Спасибо @BrunoFinelli! Единственный мелкий недосмотр, который у меня был, это «www.', было бы неплохо удалить их? – tylerl

+0

Я не понимал, что он применяется только к одной ссылке при каждом запуске ... Могли бы вы изменить свой ответ, чтобы он мог исправить более одной ссылки в данной строке? Спасибо! – tylerl

0

Вам нужно поймать вторую часть URL-адреса в другой группе захвата и указать эту группу внутри тегов привязки.

var exp = /(\b(https?|ftp|file):\/\/([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]))/i; 
text = text.replace(exp, "<a href='$1' target='_blank'>$3</a>"); 

Вы можете выяснить, как обращаться к группе, подсчитывая, когда в заявлении находится левая скобка. В приведенном выше случае вы хотите, чтобы href равнялся всей инструкции (первая левая скобка), и вы хотите, чтобы внутренний html соответствовал третьей левой скобке.

Это также будет работать, так как $& вставляет полноту совпавшей строки:

var exp = /\b(https?|ftp|file):\/\/([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i; 
text = text.replace(exp, "<a href='$&' target='_blank'>$2</a>"); 
Смежные вопросы