indexOf vs Regex (grunt.template)

Benchmark created by John Doe on


Setup

var template = '{%= foo %}';
    
    var delimiters = {};
    
    var opener = '{%';
    var closer = '%}';
    
    var a = opener.replace(/(.)/g, '\\$1');
    var b = '([\\s\\S]+?)' + closer.replace(/(.)/g, '\\$1');
    
    delimiters.lodash = {
      evaluate: new RegExp(a + b, 'g'),
      interpolate: new RegExp(a + '=' + b, 'g'),
      escape: new RegExp(a + '-' + b, 'g')
    };
    
    var regexOr = new RegExp(delimiters.lodash.evaluate.source + '|' +
                           delimiters.lodash.interpolate.source + '|' +
                           delimiters.lodash.escape.source);
    var regexGroups = new RegExp('(' + delimiters.lodash.evaluate.source + ')|(' +
                           delimiters.lodash.interpolate.source + ')|(' +
                           delimiters.lodash.escape.source + ')');
    var regexGroupsNonCapturing = new RegExp('(?:' + delimiters.lodash.evaluate.source + ')|(?:' +
                           delimiters.lodash.interpolate.source + ')|(?:' +
                           delimiters.lodash.escape.source + ')');

Test runner

Ready to run.

Testing in
TestOps/sec
indexOf
template.indexOf(opener) >= 0
ready
Regex (separate)
delimiters.lodash.evaluate.test(template) || delimiters.lodash.interpolate.test(template) || delimiters.lodash.escape.test(template)
ready
Regex (simple OR)
regexOr.test(template)
ready
Regex (groups)
regexGroups.test(template)
ready
Regex (non-capturing groups)
regexGroupsNonCapturing.test(template)
ready

Revisions

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

  • Revision 1: published by John Doe on