【问题标题】:Regex for URL to hyperlinkURL 的正则表达式到超链接
【发布时间】:2011-12-01 23:19:46
【问题描述】:

目前,我有以下正则表达式用于将 URL 替换为 HTML 超链接:

msg = msg.replace(/(\b((https?|ftp|file):\/\/|www.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi, "<a href='out.php?u=$1'>$1</a>");

这取代了

http://www.stackoverflow.com

进入

<a href='out.php?u=http://www.stackoverflow.com'>http://www.stackoverflow.com</a>

但是现在我有一个问题。当我已经有一个超链接时,我不想将该超链接中的 URL 替换为新的超链接。

所以:

<a href='http://www.stackoverflow.com'>Stackoverflow</a>

不得成为:

<a href='<a href='out.php?u=http://www.stackoverflow.com'>http://www.stackoverflow.com</a>'>Stackoverflow</a>

有人知道我可以如何防止这种情况吗?

【问题讨论】:

标签: regex actionscript flex4


【解决方案1】:

我已经通过在字符串前后添加空格来修复它,并将所有 URL 替换为前后的空格:

msg = " " + msg + " ";
msg = msg.replace(/(\s)(((https?|ftp|file):\/\/|www.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])(\s)/gi, " <a target='_blank' href=\"" + websiteUrl + "/out.php?u=$2\"><font color='" + hyperlinkColor + "'>$2</font></a> ");
msg = StringUtil.trim(msg);

这不会替换所有超链接,因为超链接的 URL 前后没有空格。

【讨论】:

    【解决方案2】:

    你可以用一个否定的前瞻断言来做到这一点,写成 (?!expression)。所以...

    ?!(\<a)/(\b((https?|ftp|file):\/\/|www.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi, "<a href='out.php?u=$1'>$1</a>");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2011-09-17
      • 2012-08-05
      • 2011-04-28
      相关资源
      最近更新 更多