正規表現を html に適用するだけではいけません。理解しにくく、どのような副作用があるかを予測するのは困難です。むしろ、完全に解析された DOM ツリーを持つという利点を利用して、必要な要素 (テキスト ノード) だけを渡す必要があります。
さらに、次のようなことは書かないようにアドバイスします"<img src="$1" />"
。$1 に奇妙なものが含まれていると、奇妙なことが起こります。本当に簡単な回避策として、これが引き起こす可能性のあるすべてのことを考える必要はありませんjQuery('<img />').attr('src', someTextWithNotTooWellCheckedContent)
:
これがどのように機能するかの例を次に示します。
jQuery('#photos li').find('*').contents().filter(function() {
return this.nodeType == 3;
}).each(function(i, elem)
{
var matches = /(.*)(http:\/\/\S+(?:\.png|\.jpg|\.gif))(.*)/g.exec(elem.wholeText);
if (matches)
{
var parent = elem.parentNode;
var before = matches[1];
var replace = jQuery('<a />').attr('href', matches[2]).append(jQuery('<img />').attr('href', matches[2]))[0];
var after = matches[3];
parent.insertBefore(document.createTextNode(before), elem);
parent.insertBefore(replace, elem);
parent.insertBefore(document.createTextNode(after), elem);
parent.removeChild(elem);
}
});
実際: http://jsfiddle.net/B4GPt/
PS: html の構造と意図に応じて、 に置き換えfind('*')
て上記のコードを拡張する必要がある場合とない場合があります。find('*').andSelf()