Javascript 如何仅用属性和特定类替换img标记

Javascript 如何仅用属性和特定类替换img标记,javascript,jquery,regex,Javascript,Jquery,Regex,我是javascript的新手,正在寻找一些正则表达式或方法,用它们的属性替换图像标记 图像标记可以是多个,没有任何唯一的id,我只想替换那些具有特定类的图像标记 例如,我有如下字符串: var str = 'hi <img dataattr1="att1" src="abc" class="img specificclass" dataattr2="att2" dataattr3="att3" /> <img dataattr1="newatt1" src="abc" cla

我是javascript的新手,正在寻找一些正则表达式或方法,用它们的属性替换图像标记

图像标记可以是多个,没有任何唯一的id,我只想替换那些具有特定类的图像标记

例如,我有如下字符串:

var str = 'hi <img dataattr1="att1" src="abc" class="img specificclass" dataattr2="att2" dataattr3="att3" /> <img dataattr1="newatt1" src="abc" class="img specificclass"  dataattr2="newatt2" dataattr3="newatt3" /> some more tag <img dataattr1="moreatt1" src="abc" class="img specificclass"  dataattr2="moreatt2" dataattr3="moreatt3" /> <img dataattr2="noreplace" src="abc" class="img" /> end';
var str='hi some more tag end';
所以它的输出应该是这样的:

hi :::att2::: :::newatt2::: some more tag :::moreatt2::: <img data-attr1="noreplace" src="abc" class="img" /> end
hi:::att2:::newatt2:::更多标记:::更多att2:::结束
到目前为止,我尝试的是:

var str = 'hi <img dataattr1="att1" src="abc" class="img specificclass" dataattr2="att2" dataattr3="att3" /> <img dataattr1="newatt1" src="abc" class="img specificclass"  dataattr2="newatt2" dataattr3="newatt3" /> some more tag <img dataattr1="moreatt1" src="abc" class="img specificclass"  dataattr2="moreatt2" dataattr3="moreatt3" /> <img dataattr2="noreplace" src="abc" class="img" /> end';

var rgx = /<img[^>]*class="specificclass"[^>]*>/;

var regex = /<img.*?dataattr2='(.*?)'/;
var src = regex.exec(str)[1]
str = str.replace(rgx,src);

console.log(str);
var str='hi some more tag end';
变量rgx=/

但是它给出了一个错误,我不知道这是否是正确的方法,我不会为此使用正则表达式,它对于像HTML这样的非规则文本来说是非常脆弱和有问题的

相反,我会使用内置在浏览器中的DOM解析器(您已经标记了jQuery,所以我假设您是在浏览器上或在另一个具有DOM的环境中执行此操作):

var str='hi some more tag end';
//解析它并将其包装在一个div中
var frag=$(“”).append($.parseHTML(str));
//查找相关图像
frag.find(“img.specificclass[dataattr2]”){
//用包含以下内容的文本节点替换图像::[dataattr2]::
var$this=$(this);
$this.replaceWith(document.createTextNode(“::”+$this.attr(“dataattr2”)+“:”));
});
//获取结果的HTML
var str=frag.html();
console.log(str)

到目前为止,最好的方法是解析HTML并使用生成的DOM片段。