代码之家  ›  专栏  ›  技术社区  ›  Soccerrlife

替换字符串中的多个URL(angularjs)

  •  -1
  • Soccerrlife  · 技术社区  · 6 年前

    此字符串: “ 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-tag中删除,以获得更好的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 回复  |  直到 6 年前
        1
  •  0
  •   paul    6 年前
    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>
    
        2
  •  0
  •   Dmitry Egorov    6 年前

    你需要:

    1. 捕获整个URL,协议部分和可选部分除外 www. 加入另一组

    2. 将此组的值用作 <a> 的文本

    3. 添加全局修饰符

    var text = value.replace(/(https?:\/\/(?:www\.)?([^\s]+))/g, '<a href="$1">$2</a>');
                                                    ^      ^  ^                 ^
                                                    1      1  3                 2