概述
js的replace()的第一个参数可以是字符串,也可以是正则,当是字符串的时候,只能替换一个,不能全局,那怎么实现replaceAll的效果呢?
当时面试的时候,有一个手撕代码题,题目是:在第一个字符串中找到第二个字符串,然后替换成第三个字符串,而且不能用任何api,不能使用正则表达式,只能用简单的基本语法。其实就是让你原生写一个replaceAll(),并自己写部分的api
// 这是我的写法,面试官仍有点不满的感觉,他说用两个for循环,一个个去检测,其实下面的做法也是类似的复杂度
// 有同学有关于js版本更好的做法,请在下方留言,大家一起学习学习
function subString (str, i, j) {
let result = ''
for (i; i < j; i++) {
result += str[i]
}
return result
}
function replaceAll(str, before, after) {
if (before.length > str.length) {
return str
}
let searchLength = before.length
let result = ''
for (let i = 0; i < str.length; i++) {
// 匹配到第一个字符
if (str[i] === before[0]) {
// 看before长度是否长于剩下的长度
if (i > str.length - before.length) {
break
// 足够长
} else {
let compareStr = subString(str, i, i + searchLength)
if (compareStr === before) {
let front = subString(str, 0, i)
let end = subString(str, i + searchLength, str.length - 1)
str = front + after + end
}
}
}
}
return str
}