fuzzysearch-regex (v14)

Revision 14 of this benchmark created by Nicolas Bevacqua 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);
}

function fuzzysearch(query, text) {
  if (typeof query === 'string' && typeof text === 'string' && query.length && text.length) {
    return toReg(query).test(text);
  }
  return false;
}





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

function fuzzysearch (needle, haystack) {
  var hlen = haystack.length;
  var nlen = needle.length;
  if (nlen > hlen) {
    return false;
  }
  if (nlen === hlen) {
    return needle === haystack;
  }
  outer: for (var i = 0, j = 0; i < nlen; i++) {
    var nch = needle.charCodeAt(i);
    while (j < hlen) {
      if (haystack.charCodeAt(j++) === nch) {
        continue outer;
      }
    }
    return false;
  }
  return true;
}





// 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.