2

JSは正規表現文字列の最後の一致のみを置き換えているようです。正規表現に問題がある可能性があります。

var data = "<div class=\"separator\" style=\"clear: both; text-align: center;\"><img border=\"0\" src=\"https://lh3.googleusercontent.com/-dJnr7dsB21Y/UEhijTGNweI/AAAAAAAAA_w/DWiWYDOHXBA/s640/blogger-image-438529929.jpg\" /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><img border=\"0\" src=\"https://lh4.googleusercontent.com/-B3wU95K7DLI/UEhiuu75V-I/AAAAAAAAA_4/lxzGd2WajNE/s640/blogger-image-1479348845.jpg\" /></div>";
var regex = /<img (.*)src=\"(.*)\" (.*)\/>/g;
console.log("Before: "+data);
console.log("After: "+data.replace(regex, "[$2]"));

以下を出力します。

Before: <normal before string>
After: <div class="separator" style="clear: both; text-align: center;">[https://lh4.googleusercontent.com/-B3wU95K7DLI/UEhiuu75V-I/AAAAAAAAA_4/lxzGd2WajNE/s640/blogger-image-1479348845.jpg]</div>

(最後の画像のみを返します)

ちなみにこれはnode.jsです。

4

1 に答える 1

4

これは、タグの末尾を超えて一致する欲張りマッチングを使用しているためです。

代わりにこれを試してください:

var regex = /<img ([^>]*)src="([^"]*)" ([^>]*)\/>/g;

(。*)の代わりに、([^>] )または([^ "])のいずれかを使用しました。これらは否定文字クラスと呼ばれ、否定文字クラスは、文字クラスにリストされている文字を含まない範囲で一致します。

編集:Felixのコメントによると、二重引用符のエスケープを削除しました。

于 2012-10-10T18:31:51.567 に答える