1

http://jsfiddle.net/C4K6c/

JavaScript で単純な正規表現を実行しようとしていますが、うまくいきません。

HTML:

<div id="content">
    <p><img class="inline-image" src="1.jpg" data-frame="full" alt="" /></p>
    <p><img class="inline-image" src="2.jpg" data-frame="half" /></p>
    <p><img src="2.jpg" /></p>    
</div>

JS:

var content = document.getElementById('content').innerHTML,
    matches = content.match(/<img(.+)data-frame(.+)>/);

for(var i=0; i < matches.length; i++) {
    alert( matches[i] )
}

期待していたものが返されません。これは次のとおりです。

<img class="inline-image" src="2.jpg" data-frame="half" />
<img class="inline-image" src="1.jpg" data-frame="full" alt="" />
4

4 に答える 4

0

http://jsfiddle.net/C4K6c/3/

私は正規表現が大好きですが、ここでは DOM を有利に使用することを強くお勧めします。

var content = document.getElementById('content');
var images = content.getElementsByTagName('img');
var final = [];
for (var i = 0; i< images.length; i++)
    if (images[i].hasAttribute("data-frame"))
        final.push(images[i]);

このアルゴリズムには、自己文書化できるという利点があります。また、正規表現を使用するよりもおそらく高速です。

于 2013-11-05T22:47:43.687 に答える
0

欲張らないようにして、DOTALL の回避策を試してください。

matches = content.match(/<img([\s\S]+?)data-frame([^>]*)>/ig);

私も追加globalしてignore case切り替えました。

于 2013-11-05T20:09:20.230 に答える
0

gフラグを追加し、クロージング>を回避</p>して、試合に参加しないようにします。また、HTML がより多様な場合に他の問題を回避するには、最初の も変更する必要があります.+

matches = content.match(/<img([^>]+)data-frame([^>]+)>/g);

デモンストレーション

于 2013-11-05T20:02:07.237 に答える
-2

Javaについてはわかりませんが、通常、次のように記号 < > をエスケープする必要があります。

matches = content.match(/\<img(.+)data-frame(.+)\>/);
于 2013-11-05T20:06:40.390 に答える