如何在文档中找到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>!
答案 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)
我从来没有使用它,但这看起来像是一个不错的代码: