Javascript 用HTML中的链接替换URL
我有一些HTML即将发布:Javascript 用HTML中的链接替换URL,javascript,html,regex,Javascript,Html,Regex,我有一些HTML即将发布: <img src="http://www.example.com/image.jpg" /> <a href="http://www.example.com">Example.com</a> http://www.example.com 问题是它还改变了img和a标签: <img src="<a href="http://www.example.com/image.jpg">http://www.example.
<img src="http://www.example.com/image.jpg" />
<a href="http://www.example.com">Example.com</a>
http://www.example.com
问题是它还改变了img和a标签:
<img src="<a href="http://www.example.com/image.jpg">http://www.example.com/image.jpg</a>" />
<a href="<a href="http://www.example.com">http://www.example.com</a>">Example.com</a>
<a href="http://www.example.com">http://www.example.com</a>
“>Example.com
有没有什么想法可以在不解析HTML的情况下快速处理这个问题?使用正则表达式进行HTML处理会引发类似的错误,而不是尝试将正则表达式与dom处理结合使用,比如
var字符串class='1〕\
\
http://www.example.com';
变量$tmp=$(''{
html:string
});
var exp=/(\b(https?| ftp | file):\/\/[-A-Z0-9+&@#\/%?=~~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/i;
$tmp.contents().contents().addBack().each(函数()){
if(this.nodeType==Node.TEXT\u Node&&exp.test(this.nodeValue)){
$(this).replaceWith(function(){
返回$(''){
html:this.nodeValue.replace(exp“”)
}).contents()
})
}
});
var processed=$tmp.html();
snippet.log(已处理)
我最终遍历了HTML。这不是最快的解决方案,但很有效:
$(id).find('*').each(function(k,v)
{
if (v.nodeName == 'A')
{
// do stuff
}
}
正则表达式应该做的只是确保它不会以引号开始和结束。我只想避免对每个块解析HTML。这会大大降低速度。@user1780407我想接下来的问题是你希望结果有多准确。。。。将字符串与正则表达式一起使用,规则非常严格,无法得到正确答案
$(id).find('*').each(function(k,v)
{
if (v.nodeName == 'A')
{
// do stuff
}
}