fuzzysearch-regex (v7)

Revision 7 of this benchmark created on


Setup

var cases = [
      ['aaaaaaa', 'ffa aaa aa ultra'],
      ['aaaaaaaa', 'ffa aaa aa ultra'],
      ['aaaaaalt', 'ffa aaa aa ultra'],
      ['aaaaaaaaaaaaa', 'ffa aaa aa ultra'],
      ['car', 'cartwheel'],
      ['cwheel', 'cartwheel']
    ];

Test runner

Ready to run.

Testing in
TestOps/sec
original
// implementation
function fuzzysearch (query, text) {
  var i;
  var character;
  var currentIndex;
  var lastIndex = -1;
  var tlen = text.length;
  var qlen = query.length;
  if (qlen > tlen) {
    return false;
  }
  if (qlen === tlen && query === text) {
    return true;
  }
  if (text.indexOf(query) > lastIndex) {
    return true;
  }
  for (i = 0; i < qlen; i++) {
    character = query[i];
    currentIndex = text.indexOf(character, lastIndex + 1);
    if (currentIndex === -1) {
      return false;
    }
    lastIndex = currentIndex;
  }
  return true;
}




// tests
cases.forEach(function (c) {
  fuzzysearch(c[0], c[1]);
});
ready
regex-based
// implementation
function escapeRegExp(str) {
  return str.replace(/[-{}()*+?.^$|[\]]/g, '\\$&');
}

function toReg(query) {
  var x = String(query).split('').map(escapeRegExp).join('.*?');
  x = '(?:' + x + ')';
  return new RegExp(x);
}

var strRe = '\\$&';
 var escapeRe = /[-{}()*+?.^$|[\]]/g;

function fuzzysearch(query, text) {
  if (typeof query === 'string' && typeof text === 'string' && query && text) {
    return (new RegExp('(?:' + query.split('').map(escapeRe).join('.*?') + ')')).test(text);
  }
  return false;
}





// tests
cases.forEach(function (c) {
  fuzzysearch(c[0], c[1]);
});
ready

Revisions

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