如何使用带有条件的正则表达式替换文本?

时间:2011-12-28 04:14:03

标签: javascript regex

我想将纯文本格式的链接替换为html格式。

但我遇到的问题是,如果在原始链接中不存在,我不知道如何为新替换添加http://前缀。

var text        = "google.com and http://google.com";
var pattern     = /(\b((https?)\:\/\/)?[A-Za-z0-9]+\.(com|net|org))/ig;
text            = text.replace(pattern,"<a href='$1'>$1</a>");

我的意思是:

  1. 如果:google.com将被替换<a href="http://google.com">google.com</a>
  2. 如果:http://google.com将被替换<a href="http://google.com">http://google.com</a>

1 个答案:

答案 0 :(得分:3)

使用overload of String.replace that takes a function

var text = "google.com and http://google.com";
var pattern = /(\b((https?)\:\/\/)?[A-Za-z0-9]+\.(com|net|org))/ig;

text = text.replace(pattern, function (str, p1)
{
    var addScheme = p1.indexOf('http://') === -1
                    && p1.indexOf('https://') === -1;

    return '<a href="' + (addScheme ? 'http://' : '') + p1 + '">' + p1 + '</a>';
});

// text is:
// '<a href="http://google.com">google.com</a> and <a href="http://google.com">http://google.com</a>'