实现一个字符串匹配算法(如果不能基于indexOf/includes等内置方法)

【 学习探索过程中记下的点点笔记,以供分享,欢迎大家一起学习探讨~如有雷同可附链接,谦虚学习!】

实现一个字符串匹配算法,从字符串S中,查找是否存在字符串T。若存在,返回所在位置;不存在则返回-1。

这里介绍2种方法

方法一:
循环原始字符串中的每一项,让每一项从当前向后截取T.length个字符,然后和T进行比较。如果不一样,继续循环;如果一样,返回当前索引即可(循环结束)。

function {
  function myIndexOf(T) {
	  //=>This这里指向 S
	  let lenT = T.length,
	      lenS = this.length,
	      res = -1;
	  if(lenT > lenS) return -1;
	  for(let i = 0;i <= lenS - lenT; i++ ) {
	    if(this.substr(i,lenT) === T) {
	      res = i;
	      break;
	    }
	  }
     return res;
  }
  String.prototype.myIndexOf = myIndexOf;
}();

let S = 'testField',
    T = 'Field';
console.log(S.myIndexOf(T));

方法二:
正则处理。生成正则表达式并用exec()方法捕获,返回null说明不存在;存在则使用返回对象的index索引号赋值。

function {
  function myIndexOf(T) {
	  //=>This这里指向 S
	  let reg = new RegExp(T);
	  res = reg.exec(this);
	  return res === null ?  -1 : res.index;
  }
  String.prototype.myIndexOf = myIndexOf;
}();

let S = 'testField',
    T = 'Field';
console.log(S.myIndexOf(T));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值