Javascript 如何在锚定标记中自动包装文本URL

Javascript 如何在锚定标记中自动包装文本URL,javascript,jquery,html,anchor,Javascript,Jquery,Html,Anchor,我有一个简单的CMS,我为我的客户建立 这个问题不是他可能通过锚标签发布链接,而是他直接复制并粘贴到文本编辑器中 是否有一种方法可以使用JavaScript将这些链接包装在锚定标记中。因此,当加载页面而不是查看链接时: http://google.com 看起来像这样 <a href="http://google.com" target="_blank">http://google.com</a> 更新 Stackoverflow实际上是在用户向答案/问题发布UR

我有一个简单的CMS,我为我的客户建立

这个问题不是他可能通过锚标签发布链接,而是他直接复制并粘贴到文本编辑器中

是否有一种方法可以使用JavaScript将这些链接包装在锚定标记中。因此,当加载页面而不是查看链接时:

http://google.com
看起来像这样

<a href="http://google.com" target="_blank">http://google.com</a>

更新

Stackoverflow实际上是在用户向答案/问题发布URL时执行的(如果这有助于理解我试图实现的目标)


谢谢

您可以尝试一下这些方法。使用自定义属性(如
data linkify
)装饰您希望这些替换生效的标记:

什么http://google.com 某物某物 现在使用
data linkify
set在任何元素内执行替换

$('*[data linkify]')。每个(函数(){
$(this.html($(this.html()).replace(/(?:(https?\:\/\/\/[^\s]+)/m,);
});
这里有一些警告。这根本不是一个很好的正则表达式 — 它只匹配以
http://
https://
开头直到第一个空格字符的任何内容。寻找更好的URL匹配正则表达式

另外,对
.html()
使用replace意味着它将断开恰好属于
数据链接ify
元素的任何现有链接!如果文本链接中碰巧有双引号字符,它将创建断开的锚元素


您可以考虑一种非常简单的标记来标识链接。 — 这比猜测要好得多。

这是一个简单的字符串连接。你有没有试过什么可以在这里发布给我们看的东西?我不太确定从哪里开始。我在这里读过一篇文章,但它似乎会影响脚本标记和嵌入标记中的URL。我喜欢您的Answare,但最好添加一个条件,排除已经用标记修饰过的url,添加一个条件就足够了,即标识为url的字符串不能以字符串“”结尾。。。对不起,我现在不能来;-)据我所知,jQuery不提供处理文本节点的工具;本机domapi确实如此。如果逐个替换每个文本节点,则不需要破坏DOM事件。例如,此代码似乎工作得很好(不超过600个字符):该代码仍然具有非常简单的URL匹配,例如仅
http
https
,尽管它匹配到空格,前面有可选标点符号或字符串结尾,所以
https://example.com/a! https://example.com/b, https://example.com/c,d,ehttps://example.com/f
被解析为
Array.from(document.queryselectoral(“body,body*”)).flatMap((res)=>Array.from(res.childNodes)).filter({nodeType,parentElement})=>nodeType==document.TEXT\u节点和!parentElement.closest(“a,bb,button,details,select,textarea,option,script,noscript,style”).forEach((txt)=>{const-re=/\bhttps?:\/。+(?=[.!,),])(re.test(txt.textContent)){const{0:{length},0:url,index:i}=txt.textContent.match(re);txt=txt.splitText(i).splitText(length);txt.previousSibling.replaceWith(Object.assign(document.createElement(“a”),{href:url,textContent:url});}};