我遇到这个奇怪的问题,&
的网址参数分隔符IMG SRC
被HTML实体取代。
我需要替换以下字符串:
<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&scl=1" alt="">
返回:
<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&scl=1" alt="">
它应该只在双引号内替换 - 而不是在常规HTML实体的其他地方。
答案 0 :(得分:2)
var text = `<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&scl=1" alt="">`;
console.log(text.replace(/src="[^"]+/g, function(match) {
return match.replace('&', '&');
}));
根据你的陈述,这是一个字符串,而不是在dom ... ,你应该使用DOMParser
将HTML字符串转换为有效的DOM。修改@prasad的答案就是这样的:
var HTMLmarkup = `
<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&scl=1" alt="">
<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&scl=1" alt="">
`
var parser = new DOMParser()
var dom = parser.parseFromString(HTMLmarkup, "text/html");
dom.querySelectorAll('img').forEach(function(a){
console.log(a.src)
})
答案 1 :(得分:1)
尝试使用简单的正则表达式模式/&/g
。querySelectorAll用于选择img
元素
document.querySelectorAll('img').forEach(function(a){
a.src = a.src.replace(/&/g,"")
console.log(a.src)
})
<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&scl=1" alt="">
答案 2 :(得分:0)
为了完整起见,这是一个使用常规DOM功能的解决方案。它与原始要求不同,因为它提取了URL,因为(恕我直言)它是一个合理的最终目标:
var html = '<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&scl=1" alt=""> <img src="/some/other/location/?one=1&two=2&three=3">';
var aux = document.createElement("div");
aux.innerHTML = html;
var urls = [];
aux.querySelectorAll("img[src]").forEach(function(image){
urls.push(image.getAttribute("src"));
});
console.log(urls);
&#13;