Скажем, у меня есть абзац текста:
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 символов, чтобы текст, который пользователь читал, был короче, например
Таким образом, код ссылки в тексте может выглядеть так:
<a href="https://en.wikipedia.org/wiki/Northrop_Grumman_X-47B">https://en.wikipedia.org...</a>
Я осмотрелся и нашел несколько примеров, но они вообще не работают. Я хотел бы просто использовать стандартную функцию JavaScript. То есть, функция, которая принимает открытый текст (а не HTML) и может преобразовывать текст. Не знаете, как вы будете защищать от XSS одновременно.
У меня есть подозрение, что он будет включать в себя сочетание циклов через каждую часть текста, затем некоторое регулярное выражение, чтобы найти URL-адрес, извлечь его, а затем сократить URL-адрес с помощью substr() и каким-то образом заменить его в тексте. Есть идеи, как это сделать?
Спасибо за помощь.
Используйте этот скрипт
<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>
Что-то вроде этого:
$('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>'
});
});
Я отредактировал утвержденный ответ, чтобы вернуть то, что вам нужно. Это заменит текст ссылки независимо от ссылки (т.е. Это не ссылка на 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>';
});
}
p
найти все экземпляры текстовых узлов ? Это было бы очень хорошим решением