我想知道是否有人可以帮助我使用一个简单的解决方案将javascript字符串中的每个整数转换为key:value pair数组中的相应键。例如,如果我有:
var arr = {'3':'value_three', '6':'value_six', '234':'other_value'};
var str = 'I want value 3 here and value 234 here';
我会将输出解释为:
new_str = 'I want value_three here and value other_value here'
很抱歉这是我的第一篇文章,所以我希望这是有道理的,我使用的是javascript和jquery(最新版本)。 任何帮助都会非常感激。
答案 0 :(得分:5)
我只是做了这件事,但这应该有效。
var new_str = str;
for (var key in arr) {
if (!arr.hasOwnProperty(key)) {
continue;
}
new_str = new_str.replace(key, arr[key]);
}
如果您想要替换所有出现的数字,您需要将Regex合并到混合中:
var new_str = str;
for (var key in arr) {
if (!arr.hasOwnProperty(key)) {
continue;
}
new_str = new_str.replace(new RegExp(key, "g"), arr[key]);
}
另外,我会选择arr
以外的其他名称,因为这意味着当它显然是一个对象时它是一个数组。此外,请确保仅在对象上使用for-in
循环,而不是阵列,因为原型泄漏问题和其他问题。
你也可以用jQuery做到这一点,但它可能有点过分:
var new_str = str;
$.each(arr, function (key, value) {
new_str = new_str.replace(key, value);
});
答案 1 :(得分:2)
您还可以在这里使用一个看起来更干净的减速器:
new_str = Object.keys(dynamicValues).reduce((prev, current) => {
return prev.replace(new RegExp(current, 'g'), dynamicValues[current]);
}, value);
答案 2 :(得分:2)
2021 年:
一定要注意
value 3
也匹配
value 32
const arr = {'3':'value_three', '6':'value_six', '234':'other_value'};
let str = 'I want value 3 here and value 234 here';
Object.keys(arr).forEach(key => str = str.replaceAll(`value ${key}`,arr[key]))
console.log(str)
答案 3 :(得分:1)
使用 regex
,替代解决方案可能是这样的:
const object = {
"3": "value_three",
"6": "value_six",
"234": "other_value"
};
const str = "I want value 3 here and value 234 here. value 32";
const replacedText1 = str.replace(/value \d+/g, v=>object[v.split(" ")[1]] || v);
const replacedText2 = str.replace(/\d+/g, v=>object[v] || v);
console.log(replacedText1);
console.log(replacedText2);
答案 4 :(得分:0)
假设您有一个像arr
这样的对象,其中定义了str
并且声明了new_str
。然后,假设我们的目标是一个通用的解决方案,则可以完成以下工作:
// Building a regex like `/3|6|234/g`
let re = new RegExp(Object.keys(arr).join('|'), 'g');
// Arrow function is approximately equivalent to
// an anonymous function like `function(match) { return arr[match]; }`
new_str = str.replace(re, match => arr[match]);
仅需注意一点,arr
就您的示例而言是Object
。 (我意识到它们有时也称为关联数组;只是指出来)。
答案 5 :(得分:0)
我最近需要用对象的 key: value
条目替换字符串,其中一些键包含特殊字符,例如大括号。因此,正如其他人所建议的,我们可以将 String.replace
函数与传递函数作为替换值的 RegExp 一起使用,但是创建 RegExp 本身存在问题,因为我们需要使用 { 转义其中的所有特殊字符{1}}。这是转义函数和最终替换函数的示例:
\
希望对大家有所帮助!保持安全:)