title: How do I loop through a regex's matches inside a replace in javascript?
body: <p>I have the following JavaScript (the spaces in the <code>&lt;P&gt;</code>s are non-breaking):</p>
  
  <pre><code>var html = '...&lt;li&gt;sub 2&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;\n\
  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subsub 1&lt;/p&gt;\n\
  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ii.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subsub 2&lt;/p&gt;\n\
  &lt;ol start="2"&gt; \n\
  &lt;ol start="3"&gt; \n\
  &lt;li&gt;sub 3&lt;/li&gt;&lt;/ol&gt;...';
  
  $(function () {
      var nestedListFixer = /(?:&lt;\/li&gt;&lt;\/ol&gt;\s*)+(?:&lt;p&gt;(?:&amp;(?:nbsp|\#0*160|x0*A0);)+(?:\s[ivxlcdm]+\.)(?:&amp;(?:nbsp|\#0*160|x0*A0);)+\s(.*?)&lt;\/p&gt;\s*)+(?:&lt;ol(?:\sstyle=\"[^\"]+\")?\sstart=\"[^\"]+\"&gt;\s*)+/i;
      html = html.replace(nestedListFixer, function($0, $1){
          var lis = ""
          $.each($1, function () {
              lis += "&lt;li&gt;" + this + "&lt;/li&gt;\n";
          });
          alert("&lt;ol&gt;\n" + lis + "&lt;/ol&gt;&lt;/li&gt;");
          return "&lt;ol&gt;\n" + lis + "&lt;/ol&gt;&lt;/li&gt;";
      });
  });
  </code></pre>
  
  <p>The <code>alert()</code>'s output:</p>
  
  <pre><code>&lt;ol&gt;
  &lt;li&gt;s&lt;/li&gt;
  &lt;li&gt;u&lt;/li&gt;
  &lt;li&gt;b&lt;/li&gt;
  &lt;li&gt;s&lt;/li&gt;
  &lt;li&gt;u&lt;/li&gt;
  &lt;li&gt;b&lt;/li&gt;
  &lt;li&gt; &lt;/li&gt;
  &lt;li&gt;2&lt;/li&gt;
  &lt;/ol&gt;&lt;/li&gt;
  </code></pre>
  
  <p>Here's what I hoped it would be:</p>
  
  <pre><code>&lt;ol&gt;
  &lt;li&gt;subsub 1&lt;/li&gt;
  &lt;li&gt;subsub 2&lt;/li&gt;
  &lt;/ol&gt;&lt;/li&gt;
  </code></pre>
  
  <p>How do I correctly loop through each match in the <code>$1</code>?</p>
  
  <p><strong>Update:</strong> simplified pattern and matching example:</p>
  
  <pre><code>var text = '1ab2cb3cd4ab5cb6cd7';
  
  $(function () {
      var textFixer = /(?:a)(?:b(.*?)c)+(?:d)/i;
      text = text.replace(textFixer, function($0, $1){
          var numbers = "";
          $.each($1, function () {
              numbers += this;
          });
          alert(numbers);
          return numbers;
      });
      alert(text);
  });
  
  // actual text:
  // 13467
  // desired text:
  // 1234567
  </code></pre>