使用split和join

还有一个替代解决方案:使用两个 JavaScript 函数。
尽管此解决方案比正则表达式慢,但它也非常方便。

第一个函数是 split() ,它的目标是在找到模式时截断字符串,并返回一个带有标记的数组,如下所示:

const phrase = 'I love animals! Animals are cute';
const tokens = phrase.split('animals');
console.log(tokens); //["I love  ", "! Animals are great"]

然后,我们需要在没有分隔符的帮助下将令牌加入新字符串中:

const stripped = tokens.join('') //"I love ! Animals are great"

自定义递归搜索和替换

当我们提供字符串作为替换函数的第一个参数时,它仅替换字符串的第一次出现。
使用该信息,我们可以创建一个函数,该函数递归地遍历整个字符串,调查并替换它,直到替换整个匹配项。

此处演示了使用区分大小写的搜索替换所有匹配项:

String.prototype.replaceAll = function (searchString, replaceString) {
  var str = this;
  //字符串中没有匹配项:
  if (str.indexOf(searchString) === -1) {
    //返回字符串
    return str;
  }
  //替换并删除第一个匹配项,并执行另一个递归搜索/替换
  return (str.replace(searchString, replaceString)).replaceAll(searchString, replaceString);
}
//usage:
str.replaceAll('welcome', 'hello');
//output: hello world! hello people! Welcome hello!

因此,替换所有出现的 JavaScript 字符串并非易事。
不幸的是,无法在运行时从字符串快速生成正则表达式,因为我们需要转义正则表达式的特殊字符。
此外,处理一个简单的字符串替换的正则表达式是压倒性的。

幸运的是,存在 String.prototype.replaceAll(),它可以直接替换所有出现的字符串。
因此,我们建议基本上依靠这种方法。

使用正则表达式

一般情况下,使用 JavaScript 的 replace() 函数进行替换。

让我们从最直接的方式开始:将 replace() 函数与正则表达式 (regexp) 结合起来。

以下正则表达式实现了区分大小写的替换:

String.replace(/<TERM>/g, '')

在下一个示例中,所有出现的单词“animals”都被替换为字符串短语:

const phrase = 'I love animals! Animals are cute'
const stripped = phrase.replace(/animals/g, '')
console.log(stripped) //"I love ! Animals are cute"

要执行不区分大小写的替换,我们需要在正则表达式中使用 gi 选项,如下所示:

String.replace(/<TERM>/gi, '')

该示例如下所示:

const phrase = 'I love animals! Animals are cute'
const stripped = phrase.replace(/animals/gi, '')
console.log(stripped) //"I love ! are cute"

请注意,如果字符串中有特殊字符,它可能不适用于正则表达式。

这就是为什么我们建议我们通过应用以下函数来跳过字符串:

const outputRegExp = (string) => {
  return string.replace(/[.*+?^${}()|[\]\]/g, '\$&')
}
如何在 JavaScript 中替换所有出现的字符串

在这个片段中,我们将指导我们学习在 JavaScript 中替换所有出现的字符串的正确方法。

日期:2020-06-02 22:16:25 来源:oir作者:oir