Eval vs RegExp

Benchmark created by Louis Stowasser on


Preparation HTML

<script>
  var pattern = "/[ab]+/i";
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Eval
var p1 = eval(pattern);
ready
Stringz
var del = pattern.substr(0, 1);
var fpattern = pattern.substring(1, pattern.lastIndexOf(del));
var flags = pattern.substr(pattern.lastIndexOf(del) + 1);
var p2 = new RegExp(fpattern, flags);
ready
Function
function string_to_regexp(pattern) {
 if (typeof pattern !== 'string' || pattern.length < 2) {
  return false;
 }

 // Convert the pattern string into a RegExp object
 var delim = pattern[0],
     escaped = false,
     newPattern = '',
     finished = false;
 while (pattern.length > 1 && !finished) {
  // Cut off the previous character
  pattern = pattern.substring(1);

  // Make sure we aren't handling an escaped character
  if (!escaped) {
   // Check for an ending delimiter
   if (pattern[0] === delim) {
    finished = true;

    // Remove the ending delimiter
    pattern = pattern.substring(1);
   } else {
    // Handle escape characters
    if (pattern[0] === "\\") {
     if (pattern[1] === delim) {
      // Remove the now extraneous escape character
      pattern = pattern.substring(1);
     } else {
      escaped = true;
     }
    }

    newPattern += pattern[0];
   }

  } else {
   escaped = false;
  }

 }

 // Invalid pattern string
 if (!finished) {
  return false;
 }

 // Make the RegExp object from our collected data
 return new RegExp(newPattern, pattern);
}
var p3 = string_to_regexp(pattern);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by Louis Stowasser on