我正在尝试用多个其他单词替换字符串中的多个单词。字符串是“我有一只猫,一只狗和一只山羊。”
然而,这并不产生“我有一只狗、一只山羊和一只猫”,而是产生“我有一只猫、一只猫和一只猫”。在javascript中是否可以同时用多个其他字符串替换多个字符串,以便生成正确的结果?
var str = "I have a cat, a dog, and a goat.";
str = str.replace(/cat/gi, "dog");
str = str.replace(/dog/gi, "goat");
str = str.replace(/goat/gi, "cat");
//this produces "I have a cat, a cat, and a cat"
//but I wanted to produce the string "I have a dog, a goat, and a cat".
26条答案
按热度按时间nkkqxpd916#
您可以使用分隔符查找和替换字符串。
2nc8po8w17#
y1aodyip18#
使用常规函数定义要替换的模式,然后使用替换函数处理输入字符串,
bwleehnv19#
此解决方案可以调整为仅替换整个单词-因此,例如,“catch”、“ducat”或“locator”在搜索“cat”时不会被找到。这可以通过使用负查找来完成
(?<!\w)
消极前瞻(?!\w)
关于正则表达式中每个单词前后的单词字符:JSFIDLE演示:http://jsfiddle.net/mfkv9r8g/1/
7qhs6swi20#
万一有人想知道为什么原始海报的解决方案不起作用:
jei2mxaa21#
使用我的replace once软件包,您可以执行以下操作:
lh80um4z22#
这对我很有用:
eoigrqb623#
使用array.prototype.reduce():
例子
cnwbcb6i24#
使用编号的项目以防止再次更换。如
然后
工作原理:-%\d+查找%后面的数字。括号表示数字。
该数字(作为字符串)是lambda函数的第二个参数n。
+n-1将字符串转换为数字,然后减去1以索引pets数组。
然后将%数字替换为数组索引处的字符串。
/g导致使用每个数字重复调用lambda函数,然后用数组中的字符串替换这些数字。
在现代javascript中:-
hmtdttj425#
在本例中,这可能无法满足您的确切需求,但我发现这是替换字符串中多个参数的一种有用方法,是一种通用解决方案。它将替换参数的所有示例,无论引用了多少次:
您可以按如下方式调用它:
iqjalb3h26#
特定溶液
您可以使用一个函数替换每个函数。
JSFIDLE示例
概括起来
如果您想动态地维护regex,并且只需将未来的交换添加到Map中,您可以这样做
生成正则表达式。那么看起来是这样的
要添加或更改任何其他替换,您只需编辑Map即可
摆弄动态正则表达式
使其可重复使用
如果你想让它成为一个通用模式,你可以把它拉出来,变成这样一个函数
因此,您只需将str和替换的Map传递给函数,它就会返回转换后的字符串。
玩弄功能
为了确保object.keys在较旧的浏览器中工作,请从mdn或es5添加polyfill。