使用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 中替换所有出现的字符串的正确方法。