Node Buffer 利用 slice + indexOf 生成 split 方法
demo
let buf = Buffer.from('你你我们我你们'); Buffer.prototype.split = function (seq) { let arr=[]; let len = Buffer.from(seq).length // console.log(len); let index= 0; //开始的长度 // console.log(this.toString()); let target = this.indexOf(seq); // console.log(target); //输出找到目标之前的长度 while(-1!=(current=this.indexOf(seq,index))) { arr.push(this.slice(index,current)) index= current + len; //下次查找的长度应该是目标之前的长度 + 目标的长度 } arr.push(this.slice(index)) // index= target + len; //下次查找的长度应该是目标之前的长度 + 目标的长度 return arr.toString(); } console.log(buf.split('我'))
输出:
你你,们,你们
先得出 我们要分隔的字符串 的长度
Buffer.from(seq).length
我们要返回的是一个数组 所以先声明数组为空
let arr=[]; return arr.toString();
开始分割时长度为 0
let index= 0; //开始的长度
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
this.indexOf(seq,index)
当前的位置
current=this.indexOf(seq,index)
下次要开始查找的位置
当前的位置 + 查找字符串的 长度
current + len;
做一个判断 如果 查找到我们传入的字符串 我们就将 查找到的目标之前的 字符串添加到数组里面
while(-1!=(current=this.indexOf(seq,index))) { arr.push(this.slice(index,current)) index= current + len; //下次查找的长度应该是目标之前的长度 + 目标的长度 }
截取字符串
this.slice(index,current)
截取的是每次判断的 目标的 之前的
越努力越幸运