JavaScript replace()/g修饰符只替换最后一个模式

JavaScript replace() /g modifier replaces the pattern only last one

本文关键字:替换 最后一个 模式 replace JavaScript      更新时间:2023-09-26

Primary,我的消息(div)包含两个相同的图像,其二进制内容位于src=""标记内。通过点击按钮,我必须从整个消息中踢出src=""属性。我使用/g修饰符用.replace()方法做了这个,但它只替换了最后一次出现的内容。

我的模式是:

$("#event-1").html().replace(/<img's+id="(.+)"'s+class="(.+)"'s+src=".+">/g, "<img id='"$1'" class='"$2'">");
// It's easy-just rewrite <img> without src attr

源消息为:

Hello!
<img id="Chrysanthemum.jpg" class="attachImg" src="data:image/jpeg;base64,/9j/4AAQS">
<img id="Chrysanthemum.jpg" class="attachImg" src="data:image/jpeg;base64,/9j/4AAQS">

应该变成:

Hello!
<img id="Chrysanthemum.jpg" class="attachImg">
<img id="Chrysanthemum.jpg" class="attachImg">

但我得到了错误的结果:

<img id="Chrysanthemum.jpg" class="attachImg" src="data:image/jpeg;base64,/9j/4AAQS">
<img id="Chrysanthemum.jpg" class="attachImg">

之所以会发生这种情况,唯一的想法是由于图像的src,源字符串太大。你有什么办法解决这个问题吗?

id必须是唯一的,您需要使用类:

<img class="attachImg Chrysanthemum" src="data:image/jpeg;base64,/9j/4AAQS" />
<img class="attachImg Chrysanthemum" src="data:image/jpeg;base64,/9j/4AAQS" />

则可以使用.removeAttr():

从匹配元素集中的每个元素中删除一个属性。

$("#event-1").find('.Chrysanthemum').removeAttr('src');

为什么不只是

$("#event-1 img").removeAttr('src');

您需要使.+量词不贪婪,以防止正则表达式跨越这两个图像。

/<img's+id="(.+?)"'s+class="(.+?)"'s+src=".+?">/g
               ^               ^            ^

但我同意其他回答者的意见,他们建议删除removeAttr的属性。