如何使用lodash的_.replace方法替换字符串中所有出现的内容?

42
如何用另一个字符串替换字符串中每个匹配的子串?
var text = "azertyazerty";
_.replace(text,"az","qu")

返回quertyazerty

4个回答

51

你也可以这样做

var text = "azertyazerty";
var result = _.replace(text, /az/g, "qu");

5
这基本上是一个只有代码的答案,不如那些能提供一些描述的答案有用。你可能要提到这是一种“简单”的编写正则表达式的方法,但实际上你正在使用一个正则表达式。 - random_user_name

47

你需要使用lodash提供的全局选项的RegExp。

因此只需使用

var text = "azertyazerty";
_.replace(text,new RegExp("az","g"),"qu")

返回quertyquerty


3
"g"修饰符用于进行全局匹配(查找所有匹配项而不是在第一个匹配后停止)。 - Sergey_T

29

我喜欢 lodash,但这可能是很少几件事情中没有它更容易的。

var str = str.split(searchStr).join(replaceStr)
作为一个带有一些错误检查的实用函数:
var replaceAll = function (str, search, replacement) {
  var newStr = ''
  if (_.isString(str)) { // maybe add a lodash test? Will not handle numbers now.
    newStr = str.split(search).join(replacement)
  }
  return newStr
}

为了完整起见,如果您确实非常想使用lodash,则要真正替换文本,请将结果分配给变量。

var text = 'find me find me find me'
text = _.replace(text,new RegExp('find','g'),'replace')

参考资料: 如何在JavaScript中替换所有出现的字符串?


太喜欢了!这个解决方案太棒了,完全不需要正则表达式。因为搜索字符串通常可以由外部输入提供,在这种情况下,如果搜索字符串包含特殊字符,使用正则表达式可能不安全。而这个解决方案既聪明又安全! - undefined

8

使用原生JS就足够满足你的需求,无需借助lodash库。

const text = "azertyazerty"
text.replace(new RegExp("az", "g"), "qu")

在我看来,这是最直接的一个。 - Matt Crampton
1
不是完全的。这对于可能具有正则表达式字符的动态搜索字符串无效。 - Matthias
请参见 https://dev59.com/HnM_5IYBdhLWcg3w-4dg#1144788 - Rich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接