从字符串中删除图像元素

Mel*_*Dog 6 javascript string jquery image

我有一个字符串,其中包含存储在var中的HTML图像元素.

我想从字符串中删除图像元素.

我试过了: var content = content.replace(/<img.+>/,"");

并且:var content = content.find("img").remove();但没有运气.

任何人都可以帮助我吗?

谢谢

Mat*_*lin 23

var content = content.replace(/<img[^>]*>/g,"");
Run Code Online (Sandbox Code Playgroud)

[^>]*表示除以外的任何数量的字符>.如果您使用.+,则如果有多个标记,则替换操作会立即删除它们,包括它们之间的任何内容.默认情况下操作是贪婪的,这意味着它们使用最大可能的有效匹配.

/g 在最后意味着替换所有出现(默认情况下,它只删除第一次出现).

  • **注意:** 如果 `img` 是这样的,则不起作用:`&lt;img src="blah.png" title="&gt;:(" /&gt;`。更好的方法是:`var content = $(content).find("img").remove().html();` (2认同)

pow*_*tac 6

使用该text()功能,它将删除所有HTML标签!

var content = $("<p>"+content+"</p>").text();
Run Code Online (Sandbox Code Playgroud)


Sco*_*den 6

$('<p>').html(content).find('img').remove().end().html()
Run Code Online (Sandbox Code Playgroud)


mlu*_*noe 6

以下正则表达式应该可以解决问题:

var content = content.replace(/<img[^>"']*((("[^"]*")|('[^']*'))[^"'>]*)*>/g,"");
Run Code Online (Sandbox Code Playgroud)

它首先匹配<img. 然后[^>"']*匹配除>,"'任意次数之外的任何字符。然后(("[^"]*")|('[^']*'))匹配两个"之间的任何字符(除了"它自己,这是这个部分[^"]*)或相同的东西,但有两个'字符。

这方面的一个例子是"asf<>!('"or 'akl>"<?'

这后面再次跟除了>,之外的任何字符,"并且出现 '任意次数。正则表达式在发现>一组单引号或双引号之外时结束。

>正如@Derek所指出的那样,这将解释在属性字符串中包含字符????因此将在以下测试场景中匹配并删除所有四个图像标签:

<img src="blah.png" title=">:(" alt=">:)" /> Some text between <img src="blah.png" title="<img" /> More text between <img /><img src='asdf>' title="sf>">
Run Code Online (Sandbox Code Playgroud)

这当然受到@Matt Coughlin的回答的启发。