Slechts één item is teruggekeerd, ondanks het gebruik van globale modifiers in Regex

Ik gebruik de onderstaande JavaScript-code om te proberen het nummer achter gallery-entry _ te extraheren in de html-markup hieronder, maar in plaats van alle overeenkomsten te geven, wordt alleen de eerste geretourneerd ondanks het gebruik van de g modifier in de regex. Enig idee waarom?

<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>

Dit is de opmaak:


1

1 antwoord

exec always returns one item.

U kunt exec in een lus gebruiken of in plaats daarvan String.prototype.match() gebruiken.

_gallery.match(_pat);

Dat gezegd hebbende, lijkt het niet een erg goede keuze om een ​​regex te gebruiken om de gewenste gegevens te krijgen.

Als u de ID's wilt gebruiken, gebruikt u .map() .

var _items = $('ul.gallery > li').map(function(i,el) {
                                          return el.id;
                                     }).toArray();
3
toegevoegd
Ik heb alleen het nummer in de ID's nodig voor het sorteren. Heel erg bedankt voor je antwoord!
toegevoegd de auteur Steve, de bron