Заменить несколько ссылок в строке (AngularJS) - PullRequest
0 голосов
/ 27 мая 2018

Эта строка: "https://stackoverflow.com/1 test https://stackoverflow.com/2" должна быть преобразована в: "<a href="https://stackoverflow.com/1> stackoverflow.com/1 </a> test <a href="https://stackoverflow.com/2"> stackoverflow.com/2 </a>"

Так что там нужно изменить:

  1. Поместить <a href>..</a> вокругссылки, чтобы вы могли щелкнуть по нему.
  2. "https://" или" http://" должны быть удалены внутри тега a, чтобы получить более хороший URL.

Что у меня естьдо сих пор:

AngularJS

$scope.convertedBio = function(value) {
  var text = value.replace(/(http[^\s]+)/, '<a href="$1">$1</a>');
   return text;
}

Однако это возвращает "<a href="https://stackoverflow.com/1">https://stackoverflow.com/1</a> test https://stackoverflow.com/2"

Ответы [ 2 ]

0 голосов
/ 27 мая 2018
function replaceUrls(value) {
  var text = value.replace(/(https?:\/\/)(www\.)?([\S]*)/g, '<a href="$1$2$3">$3</a>');
  return text;
}

var x = replaceUrls('http://stackoverflow.com/1 test https://www.stackoverflow.com/2')

console.log(x)

// output <a href="https://stackoverflow.com/1">stackoverflow.com/1</a> test <a href="https://www.stackoverflow.com/2">stackoverflow.com/2</a>
0 голосов
/ 27 мая 2018

Вам необходимо:

  1. Захватить весь URL-адрес, кроме части протокола и необязательного www., в дополнительную группу

  2. Использовать этозначение группы как текст <a>

  3. Добавить глобальный модификатор

var text = value.replace(/(https?:\/\/(?:www\.)?([^\s]+))/g, '<a href="$1">$2</a>');
                                                ^      ^  ^                 ^
                                                1      1  3                 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...