📅  最后修改于: 2023-12-03 15:31:38.403000             🧑  作者: Mango
有时,你会发现自己需要替换一个字符串或一段文本,但是你没有办法使用 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()
方法。
最后,感谢您的阅读,希望本文对您有所帮助!