我试图用多个其他单词替换字符串中的多个单词。字符串是“我有一只猫,一只狗和一只山羊。”
然而,这并不会产生“我有一只狗、一只山羊和一只猫”,而是产生“我有一只猫、一只猫和一只猫”。是否有可能在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".
我扩展了一下@本麦考密克斯。他的工作规则字符串,但不如果我转义字符或通配符。我是这么做的
str = "[curl] 6: blah blah 234433 blah blah";
mapObj = {'\\[curl] *': '', '\\d: *': ''};
function replaceAll (str, mapObj) {
var arr = Object.keys(mapObj),
re;
$.each(arr, function (key, value) {
re = new RegExp(value, "g");
str = str.replace(re, function (matched) {
return mapObj[value];
});
});
return str;
}
replaceAll(str, mapObj)
返回"blah blah 234433 blah blah"
这样它将匹配mapObj中的键,而不是匹配的单词'
String.prototype.replaceSome = function() {
var replaceWith = Array.prototype.pop.apply(arguments),
i = 0,
r = this,
l = arguments.length;
for (;i<l;i++) {
r = r.replace(arguments[i],replaceWith);
}
return r;
}
/*
字符串的replaceSome方法
它需要尽可能多的参数,然后替换所有参数
我们指定的最后一个参数
2013年版权保存:Max Ahmed
这是一个例子:
var string = "[hello i want to 'replace x' with eat]";
var replaced = string.replaceSome("]","[","'replace x' with","");
document.write(string + "<br>" + replaced); // returns hello i want to eat (without brackets)
*/
jsFiddle: http://jsfiddle.net/CPj89/
通过使用原型函数,我们可以通过传递对象的键和值以及可替换的文本轻松地进行替换
String.prototype.replaceAll =函数(obj keydata =“关键”){
const键= keydata.split(关键);
返回Object.entries (obj) .reduce((,(关键,val)) = > a.replace(“${键[0]}${关键}${键[1]}',val),)
}
Const data=' hidden dv SDC sd ${yathin} ${ok}'
console.log (data.replaceAll ({yathin: 12,好的:“嗨”},“${关键}”))
使用编号的物品,防止再次更换。
如
let str = "I have a %1, a %2, and a %3";
let pets = ["dog","cat", "goat"];
then
str.replace(/%(\d+)/g, (_, n) => pets[+n-1])
它的工作原理:-
%\d+查找跟在%后面的数字。括号表示数字。
这个数字(作为字符串)是lambda函数的第二个参数n。
+n-1将字符串转换为数字,然后减去1以索引宠物数组。
然后将%数字替换为数组下标处的字符串。
/g导致lambda函数被重复调用,每个数字被替换为数组中的字符串。
在现代JavaScript中:-
replace_n=(str,...ns)=>str.replace(/%(\d+)/g,(_,n)=>ns[n-1])