正则表达式查找链接

时间:2019-06-18 13:43:26

标签: javascript regex

我有一个问题,就是在某些情况下为链接找到正则表达式。这是场景:

我创建了utils.ts,它是一个打字稿。基本上,它将以API响应作为输入,并返回格式化的HTML支持的文本,例如粗体文本,电子邮件,图像,链接。

因此,让我们来看一个我面临的情况。

作为utils.ts文件的返回,我得到了这个。

https://www.google.com <a href="https://www.youtube.ca" target="_blank">Click here</a> (注意:普通链接和'a'标签链接可以以任何顺序出现)

从上面的文本中

,您可以看到<a href="https://www.youtube.ca" target="_blank">Click here</a>这部分已经在HTML支持的方法中。 所以我将在GUI上获得以下输出

  

https://www.google.com单击此处

因此,从这一点出发,我想要一个可以格式化https://www.google.com的正则表达式,但是它不能操纵<a href="https://www.youtube.ca" target="_blank">Click here</a>,因为它已经格式化了。

在这里,我还想按照以下格式设置https:///www.google.com

  

Google

我面临的主要问题是当我用标签将“ https:// ..”替换为标签时,它还会替换“ href”内部的链接

<a href="https://www.google.com">Google</a> <a href="<a href="https://www.youtube.com">Google</a>">Click me</a>

我不想要什么。

请分享您对此的想法。

谢谢

2 个答案:

答案 0 :(得分:2)

如果我的理解正确,您希望从文本中提取出现在文本中而不是链接的那些网址。如果是这样,请查看以下javascript:

    //the data:
    var txt1='https://www.google.com <a href="https://www.youtube.ca" target="_blank">Click here</a> http://other.domain.com';
    
    // strip html tags
    String.prototype.stripHTML = function () {
        var reTag = /<(?:.|\s)*?>/g;
        return this.replace(reTag, " ");
    };
    var txt2=txt1.stripHTML();
    //console.log(txt2); 
    
    //split tokens
    var regex1 = /\s/;
    var tokens = txt2.split(regex1); 
    //console.log(tokens);

    //build an address table
    regex2=/^https?:\/\/.*/;
    var i=0, j=0; 
    var addresses=[];
    for (i in tokens) {
        if (regex2.test(tokens[i])) {
            addresses[j] = tokens[i];
            j++;
        } 
        i++;
    }
    console.log(addresses);

答案 1 :(得分:1)

还可以使用轮换找到尚未格式化的链接。这个想法是-如果链接被格式化,则它不会被捕获到组中(不要混淆正则表达式仍然可以找到某些东西-您只应查看 Group 1 )。否则,该链接将被捕获到一个组中。

下面的正则表达式非常简单,仅用于解释这个想法。您可能希望使用更好的URL搜索模式进行更新。

demo

(?:href="https?\S+")|(https?\S+)