Javascript 将包含突出显示的链接转换为标记

Javascript 将包含突出显示的链接转换为标记,javascript,Javascript,目前,我可以转换此文本: Hello this is a link: http://foo.bar cheers! 这是一个链接:干杯 但是,;我使用ElasticSearch进行搜索,有时它会突出显示URL中的单词;并将它们包装在标签中,如下所示: Hello this is a link: http://<em>foo</em>.bar cheers! 它破坏了我的正则表达式,并且没有将URL封装在 另外,我想保留突出显示-我知道我可以删除em标记,然后转换链

目前,我可以转换此文本:

Hello this is a link: http://foo.bar cheers! 
这是一个链接:干杯

但是,;我使用ElasticSearch进行搜索,有时它会突出显示URL中的单词;并将它们包装在标签中,如下所示:

Hello this is a link: http://<em>foo</em>.bar cheers! 
它破坏了我的正则表达式,并且没有将URL封装在


另外,我想保留突出显示-我知道我可以删除em标记,然后转换链接。

这对你有用吗

var exp = /(\b(https?|ftp|file):\/\/[^\s]+)/ig;
var text = text.replace(exp, function($1){
    var s = $1;
    s = s.replace(/<\s*\/?\s*em\s*>/ig,'');
    return '<a href="'+s+'">'+$1+'</a>';
});

为什么不只是仔细检查并确定字符串是否包含,然后通过附加步骤将其剥离?一种可靠的方法是将HTML解析为DOM,搜索文本表示形式中的URL,并找到最佳包装。这是客户端JavaScript吗?你准备把HTML放到当前文档中吗?@fubbe我想保持高亮显示:最好使用为这些类型的东西创建的DOM。
var exp = /(\b(https?|ftp|file):\/\/[^\s]+)/ig;
var text = text.replace(exp, function($1){
    var s = $1;
    s = s.replace(/<\s*\/?\s*em\s*>/ig,'');
    return '<a href="'+s+'">'+$1+'</a>';
});