0

我得到以下文本/html:

Hello ! You should check this link : http://google.com
And this link too : <a href="http://example.com">http://example2.com</a>

我想要一个正则表达式来捕获我的文本中的 URL 以将它们替换为<a>. 我得到以下正则表达式:

var REG_EXP = /[^">]((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)[^"<]/gi;

但我的正则表达式也捕获http://example.comhttp://example2.com。而且我不知道如何改进它以避免这种情况。

4

2 回答 2

0

检查这个答案https://stackoverflow.com/a/4217452/1795220。肯定有 HTML<a href="http://example.com">http://example2.com</a>是不正确的。

于 2013-06-25T07:57:02.220 回答
0

这可以满足您的需求:

(?<!href=")(http://[a-z0-9]++(?:[.-:/?&=][a-z0-9]+)++)(?!</a>)

请注意,我使用的 url 模式非常简单和宽松:

http://[a-z0-9]+(?:[.-:/?&=][a-z0-9]+)+
  • (?<!href=")意思是“前面没有href="
  • (?!</a>)意思是“后面没有</a>
  • ++被称为所有格量词

只需将匹配项替换<a href="$1">$1</a>为本中的内容。

在尝试解决此类工作时,不要对正则表达式抱有太多期望,这不是他们要做的。

于 2013-06-25T08:11:57.063 回答