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

时间:2014-04-22 16:33:15

标签: javascript jquery regex

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

我的模式是:

$("#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,唯一的想法是它为什么会发生太大的源字符串。 你有任何想法如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

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');

答案 1 :(得分:2)

为什么不呢

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

答案 2 :(得分:1)

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

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

但我同意其他建议使用removeAttr删除该属性的回答者。