正则表达式:替换'&'在双引号内

时间:2017-06-01 09:13:39

标签: javascript regex

我遇到这个奇怪的问题,&的网址参数分隔符IMG SRC被HTML实体取代。

我需要替换以下字符串:

<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&amp;scl=1" alt="">

返回:

<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&scl=1" alt="">

它应该只在双引号内替换 - 而不是在常规HTML实体的其他地方。

3 个答案:

答案 0 :(得分:2)

正则表达式解决方法:

var text = `<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&amp;scl=1" alt="">`;
console.log(text.replace(/src="[^"]+/g, function(match) {
  return match.replace('&amp;', '&');
}));

DOM解决方案:

根据你的陈述,这是一个字符串,而不是在dom ... ,你应该使用DOMParser将HTML字符串转换为有效的DOM。修改@prasad的答案就是这样的:

var HTMLmarkup = `
<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&amp;scl=1" alt="">
<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&amp;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)

尝试使用简单的正则表达式模式/&amp;/gquerySelectorAll用于选择img元素

Demo regex

document.querySelectorAll('img').forEach(function(a){
a.src = a.src.replace(/&amp;/g,"")
console.log(a.src)
})
<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&amp;scl=1" alt="">

答案 2 :(得分:0)

为了完整起见,这是一个使用常规DOM功能的解决方案。它与原始要求不同,因为它提取了URL,因为(恕我直言)它是一个合理的最终目标:

&#13;
&#13;
var html = '<img src="https://example.com/imagehandler?$PNG%20with%20alpha$&amp;scl=1" alt=""> <img src="/some/other/location/?one=1&amp;two=2&amp;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;
&#13;
&#13;