Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过解析包含URL的文本生成HTML锚_Javascript_Html_Regex - Fatal编程技术网

Javascript 通过解析包含URL的文本生成HTML锚

Javascript 通过解析包含URL的文本生成HTML锚,javascript,html,regex,Javascript,Html,Regex,我有一个段落包含运行文本,也可能包含URL。该段落将包含描述对象或事物的运行文本,并在其间插入URL。 URL的形式可以是 www.google.com 我需要使用JavaScript解析段落并生成HTML内容,确保URL呈现为HTML锚。 我可以用以下方法: var httpUrlPattern = /https?:\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/\$~+#-]*[\w@?^=%&\/~+#-])? text = text

我有一个段落包含运行文本,也可能包含URL。该段落将包含描述对象或事物的运行文本,并在其间插入URL。 URL的形式可以是

www.google.com 我需要使用JavaScript解析段落并生成HTML内容,确保URL呈现为HTML锚。 我可以用以下方法:

var httpUrlPattern = /https?:\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/\$~+#-]*[\w@?^=%&\/~+#-])?
text = text.replace( httpUrlPattern, '<a href="$&" target="_blank">$&</a>' );
这对于类型1和类型2的URL很有效。但对于3,它会生成href=/www.google.com

所以我应用了额外的过滤

var wwwUrlPattern = /(www\.)[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/\$~+#-]*[\w@?^=%&amp;\/~+#-])?;
text = text.replace( wwwUrlPattern, '<a href="http://$&" target="_blank">$&</a>' );
这修复了3,但破坏了2

有什么建议我如何修复所有场景吗?

嵌套组

var wwwUrlPattern = /(http:\/\/)?((www\.)[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/\$~+#-]*[\w@?^=%&amp;\/~+#-]))?/;
text = text.replace( wwwUrlPattern, '<a href="http://$2" target="_blank">$&</a>' );

由于缺乏URL的构造标准,这使得构建URL变得很困难。我假设您不想捕获没有www或mail前缀的URL,比如stackoverflow.com。这使得匹配非常不确定。可能是这样的:

/\b[\w.,@?^=%&:/$~+#-]+\.\w\w+\b/
但是有一个巨大的错误匹配的风险

要使其更具体,您可以强制使用http或www/mail部分或/和任何其他给定前缀集:

/\b((?:https?:\/\/|www\.|mail\.)[\w.,@?^=%&:/$~+#-]+)\.\w\w+\b/
希望这有帮助


问候。

您是否正在尝试使用锚定标签包装链接?看到了吗。URL在各自的行中是分开的吗?@Stribizev:我以纯文本的形式获取链接,我将其包装在锚中,以便它们可以单击。@ClasG,不幸的是没有。它们可以在段落中的任何地方。@Abhi:那么,你不必再发明轮子,试试图书馆。谢谢,这个表达对我有用。很抱歉,我没有早点回复。但不回答是不礼貌的,所以即使几天过去了,我也在回答。再次感谢@阿比很高兴听到它起作用:也许接受答案;