实现一个字符串匹配算法(如果不能基于indexOf/includes等内置方法)
程序员文章站
2022-03-01 14:53:50
...
【 学习探索过程中记下的点点笔记,以供分享,欢迎大家一起学习探讨~如有雷同可附链接,谦虚学习!】
实现一个字符串匹配算法,从字符串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));