正则表达式替换链接

时间:2015-07-23 14:06:06

标签: javascript regex angularjs

我有以下代码以纯文本格式创建html链接。这工作正常,但链接不应包含.png或.jpg

有关改编正则表达式的任何建议吗?

var urlPattern = /(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/gi;

return function(text, target) {

    var replace = text.replace(urlPattern, '<a target="' + target + '" href="$&">$&</a>');

    return replace
};

1 个答案:

答案 0 :(得分:1)

您可以添加锚点和预测替代方案以添加限制:

var urlPattern = /^(?!.*(?:png|jpg)$)(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/~+#-]*[\w@?^=%&amp;\/~+#-])?$/gi;

  function repl (text, target) {
     var replace = text.replace(urlPattern, '<a target="' + target + '" href="$&">$&</a>');
     return replace;
  };

alert(repl("http://some.site.com/new/1.gif", "_blank"));
alert(repl("http://some.site.com/new/1.png", "_blank"));

此处的关键部分是^(?!.*(?:png|jpg)$):它会在字符串开头处开始检查,并确保最后没有pngjpg

如果你传入带有网址的较长字符串,可以使用假设网址中没有空格的the following regex

var urlPattern = /(?!\S*(?:png|jpg)(?:$|\s))(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/~+#-]*[\w@?^=%&amp;\/~+#-])?/gi;