| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | //boyer-moore?module.exports = function bm(buf,search,offset){  var m  = 0, j = 0  var table = []  var ret = -1;  for(var i=offset||0;i<buf.length;++i){    console.log('i',i)    table[i] = [[i,0]]    if(buf[i] === search[0]) {      for(j = search.length-1;j>0;--j){        table[i].push([i+j,j])        console.log('j',j)        if(buf[i+j] !== search[j]) {          //i += j          j = -1          break        }      }      if(j === 0) {        ret = i        break      }    }  }  console.log(table)  renderTable(table,buf,search)  return ret}var chalk = require('chalk')function renderTable(table,buf,search){  var s = ''  console.log('-----')  console.log('search:',search)  console.log('-----')  console.log(buf+'')  table.forEach(function(a){    if(!a) return;// console.log('')    a.forEach(function(v){      if(!v) return;      var pad = ''      while(pad.length < v[0]){        pad += ' '      }      if(search[v[1]] === buf[v[0]]) console.log(pad+chalk.green(search[v[1]]))      else console.log(pad+chalk.red(search[v[1]]))    })  })  console.log('-----')}
 |