1

以下の HTML マークアップの後に数値を抽出しようとして、以下の JavaScript コードを使用していgallery-entry_ますが、すべての一致を与える代わりにg、正規表現で修飾子を使用しているにもかかわらず、最初の一致のみを返します。理由はありますか?

<script type="text/javascript">
    var _gallery = jQuery('ul.gallery').html();
    var _pat = /"gallery-entry_([0-9]+)"/gim;
    var _items   = _pat.exec(_gallery);
    alert('str='+_items[0]); // shows str="gallery-entry_1"
    alert('item #1='+_items[1]); // shows item #1=1
    alert('total='+_items.length); // shows total=2
</script>

マークアップは次のとおりです。

<ul class="gallery">
<li id="gallery-entry_1"><a href="" title=""><img src="" width="116" height="116" alt=""></a></li>
    <li id="gallery-entry_2"><a href="" title=""><img src="" width="116" height="116" alt=""></a></li>
    <li id="gallery-entry_6"><a href="" title=""><img src="" width="116" height="116" alt=""></a></li>
    <li id="gallery-entry_10"><a href="" title=""><img src="" width="116" height="116" alt=""></a></li>
    <li id="gallery-entry_14"><a href="" title=""><img src="" width="116" height="116" alt=""></a></li>
    <li id="gallery-entry_22"><a href="" title=""><img src="" width="116" height="116" alt=""></a></li>
    <li id="gallery-entry_30"><a href="" title=""><img src="" width="116" height="116" alt=""></a></li>
    <li id="gallery-entry_31"><a href="" title=""><img src="" width="116" height="116" alt=""></a></li>         
</ul>
4

1 に答える 1

3

exec常に 1 つのアイテムを返します。

execループで使用することも、String.prototype.match()代わりに使用することもできます。

_gallery.match(_pat);

とはいえ、正規表現を使用して必要なデータを取得することは、あまり良い選択ではないようです。

ID が必要な場合は、 を使用します.map()

var _items = $('ul.gallery > li').map(function(i,el) {
                                          return el.id;
                                     }).toArray();
于 2012-06-24T02:40:50.583 に答える