String token replacement

Test code for jsperf: http://jsperf.com/dynamic-token-replace/2

by MoonScript

HTML

<p>Test code for jsperf <a href="http://jsperf.com/dynamic-token-replace/2">dynamic-token-replace/2</a>.</p>
<fieldset>
    <legend>Tokenized String</legend>
<textarea id="tokenized" rows="10" cols="60">{0} {1} {2} {3} {4}, {5} {6} {7}. {8} {9} {2} in {10} {11} a {12} {13} {14}. Nulla rutrum nisi eget orci viverra vulputate. Sed aliquam erat at arcu molestie eget sollicitudin turpis {17}. Duis vestibulum scelerisque felis at faucibus. {15} eget augue erat. Ut in {7} est, at {22} purus. In sollicitudin, urna ac convallis scelerisque, {7} tellus {14} erat, convallis rhoncus {13} turpis eu {13}. Mauris dictum arcu et eros {22} vehicula. Aenean tincidunt luctus vestibulum. Proin et {0} ac {2} vehicula eleifend. Nulla facilisi. In suscipit hendrerit ligula, vitae lacinia tellus bibendum {17}. Sed non metus eu {1} mattis vestibulum. Nulla ornare urna non urna tempor luctus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. {15} sollicitudin dictum tortor eget eleifend. Pellentesque pharetra commodo neque, eu ultrices augue volutpat eget. Mauris nunc {1}, vehicula sed {22} vitae, iaculis ac sem. Vestibulum sapien diam, rhoncus eget vestibulum et, elementum id enim.

Aliquam diam sapien, elementum quis fringilla a, semper auctor neque. {8} pretium ornare purus. {15} {12} mauris consequat tellus gravida sed rutrum massa pharetra. Integer ac magna at augue dictum {19}. Nulla molestie tortor eget tellus venenatis lacinia. Curabitur eleifend {0} a {10} mollis sed volutpat mi scelerisque. Mauris ornare, metus {3} {4} fringilla tristique, sapien {1} tristique {7}, eu lacinia est nisl ut urna. Cras semper arcu a {0} aliquam ornare. Pellentesque id {7} mi, id ultricies {1}. Quisque a lacinia {10}. Aliquam erat volutpat. Suspendisse ultrices ultricies laoreet. Aenean feugiat, ligula ac feugiat pretium, dui nulla {17} mauris, ornare imperdiet metus sem eget {10}. Duis in {18} non lacus consequat {16}. Nullam vulputate turpis a mi mollis...

JavaScript

var tokenRegEx = /\{(\d+)\}/g;

// RegExp.exec, while loop
function execWhile(str) {
  var execMatch = tokenRegEx.exec(str);
  while (execMatch) {
    str = str.replace(execMatch[0], '['+execMatch[1]+']');
    execMatch = tokenRegEx.exec(str);
  }
  return str;
}

document.getElementById('replaced-1').value = execWhile(document.getElementById('tokenized').value);

// String.match, for loop
function matchFor(str) {
  var matches = str.match(tokenRegEx);
  if (matches) {
    var matchLength = matches.length;
    for (var i=0;i<matchLength;i++) {
        str = str.replace(matches[i], matches[i].replace(tokenRegEx, '[$1]'));
    }
  }
  return str;
}

document.getElementById('replaced-2').value = matchFor(document.getElementById('tokenized').value);