Parse nested digit-lead strings
JavaScript (ES6), 68 bytes

f=s=&gt;s&amp;&amp;f(s.replace(/\d\D+$/,m=&gt;(s=m.slice(0,i=++m[0]),m.slice(i))))+s


Explanation

Based on a simple concept:


Match the last digit n followed by n letters in the input string
Remove it from the input string and add it to the start of the output string
Repeat until the input string is empty


Recursion was the shortest way to do this in JavaScript.



f=s=&gt;
  s&amp;&amp;                        // if the input string is empty, return the empty string
  f(                         // prepend the constituent before it
    s.replace(/\d\D+$/,m=&gt;(  // match the last digit followed by every remaining letter
      s=m.slice(0,n=++m[0]), // set s to the constituent (n followed by n letters)
                             // (we must use s because it is our only local variable)
      m.slice(n)             // replace the match with only the letters after it
    ))
  )+s                        // append the constituent
&lt;input type="text" id="input" value="9long3yes4lo2ngwords11here" /&gt;
&lt;button onclick="result.textContent=f(input.value)"&gt;Go&lt;/button&gt;
&lt;pre id="result"&gt;&lt;/pre&gt;