Как заменить и сократить гиперссылки в абзаце текста с помощью JavaScript / jQuery?

0

Скажем, у меня есть абзац текста:

The Northrop Grumman X-47B https://en.wikipedia.org/wiki/Northrop_Grumman_X-47B 
is a demonstration unmanned combat air vehicle (UCAV) designed for carrier-based 
operations.

Я хочу заменить гиперссылку в тексте и превратить ее в настоящую гиперссылку. В то же время я хочу укоротить формулировку гиперссылки на фиксированные 20 символов, чтобы текст, который пользователь читал, был короче, например

  • Northrop Grumman X-47B https://en.wikipedia.org... - демонстрационный беспилотный летательный аппарат (UCAV), предназначенный для операций на базе оператора.

Таким образом, код ссылки в тексте может выглядеть так:

<a href="https://en.wikipedia.org/wiki/Northrop_Grumman_X-47B">https://en.wikipedia.org...</a>

Я осмотрелся и нашел несколько примеров, но они вообще не работают. Я хотел бы просто использовать стандартную функцию JavaScript. То есть, функция, которая принимает открытый текст (а не HTML) и может преобразовывать текст. Не знаете, как вы будете защищать от XSS одновременно.

У меня есть подозрение, что он будет включать в себя сочетание циклов через каждую часть текста, затем некоторое регулярное выражение, чтобы найти URL-адрес, извлечь его, а затем сократить URL-адрес с помощью substr() и каким-то образом заменить его в тексте. Есть идеи, как это сделать?

Спасибо за помощь.

Теги:
hyperlink
plaintext
linkify

3 ответа

0
Лучший ответ

Используйте этот скрипт

<script>
function convertlink(text) {
    var urlRegex = /(https?:\/\/[^\s]+)/g;
    return text.replace(urlRegex, function(url) {
        return '<a href="' + url + '">' + geturl(url) + '</a>';
    })

}

function geturl(url){
    if(url.length > 20){
     return url.substr(0,20) + "...";
    } else { 
     return url;
    }
}

var str = "The Northrop Grumman X-47B https://en.wikipedia.org/wiki/Northrop_Grumman_X-47B is a demonstration unmanned combat air vehicle (UCAV) designed for carrier-based operations."

alert(convertlink(str));
</script>
1

Что-то вроде этого:

$('p').html(function(_,txt) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return txt.replace(exp, function(l) {
        return '<a href="'+l+'">'+l.substr(0,20)+'...</a>'
    }); 
});

FIDDLE

  • 0
    Это приятно. Как насчет того, чтобы вместо селектора p найти все экземпляры текстовых узлов ? Это было бы очень хорошим решением
  • 0
    Не будет работать для ссылок, не относящихся к Википедии.
Показать ещё 2 комментария
0

Я отредактировал утвержденный ответ, чтобы вернуть то, что вам нужно. Это заменит текст ссылки независимо от ссылки (т.е. Это не ссылка на wikipedia).

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

скрипка

Ещё вопросы

Сообщество Overcoder
Наверх
Меню