我有一个段落,其中包含可能还包含网址的正在运行的文字。该段落将包含描述对象或事物的运行文本,并在其间插入URL。 URL可以是
的形式我需要使用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.,@?^=%&:\/\$~+#-]*[\w@?^=%&\/~+#-])?;
text = text.replace( wwwUrlPattern, '<a href="http://$&" target="_blank">$&</a>' );
这解决了#3)但是打破了#2)。
有任何建议我如何解决所有情况?
答案 0 :(得分:0)
嵌套群组
var wwwUrlPattern = /(http:\/\/)?((www\.)[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/\$~+#-]*[\w@?^=%&\/~+#-]))?/;
text = text.replace( wwwUrlPattern, '<a href="http://$2" target="_blank">$&</a>' );
答案 1 :(得分:0)
缺乏URL构造标准会使其变得困难。我假设您要抓住没有www
或mail
前缀的网址,例如stackoverflow.com
。这使得匹配非常不确定。它可能是这样的:
/\b[\w.,@?^=%&:/$~+#-]+\.\w\w+\b/
但是存在错误匹配的巨大风险。
为了使其更具体,您可以制作http
或 www
/ mail
部分(或/和任何其他给定的前缀集)强制性:
/\b((?:https?:\/\/|www\.|mail\.)[\w.,@?^=%&:/$~+#-]+)\.\w\w+\b/
希望这有帮助。
问候。