12

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

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

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

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

任何人都可以帮助我吗?

谢谢

4

8 回答 8

35
var content = content.replace(/<img[^>]*>/g,"");

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

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

于 2012-06-14T01:08:53.260 回答
9
$('<p>').html(content).find('img').remove().end().html()
于 2012-06-14T01:03:14.767 回答
7

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

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

它首先匹配<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>">

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

于 2013-05-21T13:15:10.457 回答
6

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

var content = $("<p>"+content+"</p>").text();
于 2012-06-14T00:48:41.277 回答
2

我现在在 IE 中...这很好用,但是我的标签以大写形式出现(我认为在使用 innerHTML 之后)...所以我添加了“i”以使其不区分大小写。现在 Chrome 和 IE 很高兴。

var content = content.replace(/<img[^>]*>/gi,"");
于 2013-09-25T02:38:42.107 回答
0

这对你有用吗?:

var content = content.replace(/<img[^>]*>/g, '')
于 2012-06-14T00:59:54.777 回答
0

您可以将文本加载为 DOM 元素,然后使用 jQuery 查找所有图像并删除它们。我通常尝试将 XML(在这种情况下为 html)视为 XML,而不是尝试解析字符串。

var element = $('<p>My paragraph has images like this <img src="foo"/> and this <img src="bar"/></p>');

element.find('img').remove();

newText = element.html();

console.log(newText);
于 2012-06-14T01:04:58.353 回答
0

要在没有正则表达式或库(阅读 jQuery)的情况下执行此操作,您可以使用 DOMParser 解析您的字符串,然后使用纯 JS 进行任何操作并重新序列化以取回您的字符串。

于 2018-07-09T14:19:19.217 回答