📜  javascript replace without replace() - Javascript (1)

📅  最后修改于: 2023-12-03 15:31:38.403000             🧑  作者: Mango

Javascript Replace Without Replace()

有时,你会发现自己需要替换一个字符串或一段文本,但是你没有办法使用 JavaScript 原生的 replace() 方法。也许你无法使用字符串方法、你使用了一个不支持 replace() 方法的 API,或者是你只是不想使用正则表达式。

本文将介绍如何实现“无 replace() 方法”的 JavaScript 替换方法,并提供几个示例。

使用 split()join()

一个常见的办法是使用 split() 方法将字符串分成一个数组,然后使用 join() 方法将数组连接成一个字符串。这里是一个函数,可以将一个字符串中的所有“foo”替换为“bar”:

function replaceString(original, find, replace) {
  return original.split(find).join(replace);
}

replaceString("foobarfoo", "foo", "bar"); // "barbarbar"

上述代码使用 split("foo") 把字符串 "foobarfoo" 分成以下数组:

['', 'bar', 'bar', '']

然后使用 join("bar") 把这个数组拼接成一个字符串 "barbarbar"。

一个更复杂的替换操作如下:

function replaceAllFromString(original, find, replace) {
  // 如果原始字符串中已经存在替换后的字符串,返回原始字符串(避免无限递归)
  if (original.indexOf(replace) !== -1) {
    return original;
  }
  // 递归调用 replaceString 直到所有 find 都被替换
  var modified = replaceString(original, find, replace);
  if (modified.indexOf(find) !== -1) {
    modified = replaceAllFromString(modified, find, replace);
  }
  return modified;
}

replaceAllFromString("the quick brown fox jumped over the lazy dog", "the", "a"); // "a quick brown fox jumped over a lazy dog"

该函数递归调用 replaceString(),直到没有剩余的 find 字符串可以替换为止。

使用 substring()indexOf()

另一个办法是使用 substring() 方法。该方法可以帮助你找到一个子字符串在字符串中的位置,然后可以使用 substring() 方法来将其替换为新的字符串。

下面是一个函数,可以将一个字符串中的所有“foo”替换为“bar”:

function replaceAll(original, find, replace) {
  var start = original.indexOf(find);
  while (start !== -1) {
    original = original.substring(0, start) + replace + original.substring(start + find.length);
    start = original.indexOf(find, start + replace.length);
  }
  return original;
}

replaceAll("foobarfoo", "foo", "bar"); // "barbarbar"

上述代码使用 indexOf() 方法找到第一个出现的子字符串 find 的位置,如果找到了该子字符串,则使用 substring() 方法将其替换为 replace 字符串。然后 indexOf() 方法会再次检查该子字符串的出现位置,以进行下一次替换,直到没有剩余的 find 字符串可以替换为止。

总结

本文介绍了两种 JavaScript 替换字符串的方法,一种使用 split()join() 方法,一种使用 substring()indexOf() 方法。无论哪种方法,都可以轻松替换字符串,而不必依赖 replace() 方法。

最后,感谢您的阅读,希望本文对您有所帮助!