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ます。次に、、および[^>"']*を除く任意の文字と 任意の回数一致します。次に、2つを間にある任意の文字(この部分であるそれ自体を除く)または同じものと一致させますが、2つの文字を使用します。>"'(("[^"]*")|('[^']*'))""[^"]*'

この例はまたは"asf<>!('"です'akl>"<?'

>この後に、、"および を除く任意の文字が何回も続き'ます。>正規表現は、一重引用符または二重引用符のセットの外側を見つけたときに結論を出します。

これは、@ Derek朕會功夫>によって指摘されているように、属性文字列内に文字があることを考慮しているため、次のテストシナリオでは4つの画像タグすべてに一致して削除されます。

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

もちろん、これは@MattCoughlinの回答に触発されています。

于 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 に答える