原生JS实现replaceAll()函数

本文介绍了一种不使用API和正则表达式,在JavaScript中实现replaceAll()功能的方法。通过自定义函数replaceAll,遍历字符串,逐个字符比较,完成对指定子串的全局替换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值