Javascript:查找文档中的URL

时间:2010-04-14 22:48:36

标签: javascript regex dom url

如何在文档中找到URL(即www.domain.com),并将其放在锚点中:< a href =“www.domain.com”> www.domain.com< / a>

HTML:

Hey dude, check out this link www.google.com and www.yahoo.com!

的javascript:

(function(){var text = document.body.innerHTML;/*do replace regex => text*/})();

输出:

Hey dude, check out this link <a href="www.google.com">www.google.com</a> and <a href="www.yahoo.com">www.yahoo.com</a>!

2 个答案:

答案 0 :(得分:6)

首先,www.domain.com不是网址,而是主机名,

<a href="www.domain.com">

无效 - 它会查找相对于当前页面的名为.com的{​​{1}}文件。

在一般情况下,无法突出显示主机名,因为几乎任何东西都可以是主机名。您可以尝试突出显示“www.something.dot.separated.words”,但它并不是那么可靠,并且有许多网站不使用www.domain主机名前缀。我试着避免这种情况。

www.

这是一种非常自由的模式,您可以将其用作检测HTTP URL的起点。根据您所获得的输入类型,您可能希望缩小其允许的范围,并且可能值得检测像/\bhttps?:\/\/[^\s<>"`{}|\^\[\]\\]+/; .这样的尾随字符,这些字符将是URL的有效部分,但在通常不是练习。

(如果您愿意,可以使用!允许 URL语法 |语法。)

无论如何,一旦你确定了首选模式,你就需要在页面上的文本节点中找到该模式。 请勿在{{1​​}}标记上运行正则表达式。您最终会通过尝试标记已经在标记内的每个www.hostname来彻底破坏页面。当您替换innerHTML内容时,您还将销毁任何现有的JavaScript引用,事件或表单字段值。

一般来说,regexp无法以任何可靠的方式处理HTML。因此,利用浏览器已经将HTML解析为元素和文本节点的事实,并只查看文本节点。您还希望避免查看href="http://something"个元素,因为当URL已经在链接中时,将URL标记为链接是愚蠢的(并且无效)。

innerHTML

答案 1 :(得分:2)

我从来没有使用它,但这看起来像是一个不错的代码:

http://github.com/cowboy/javascript-linkify