我有一个字符串如下:
{hours}/DP1/{facilityId}/CP23/{minutes}
并有一个对象是:
{
hours: 4,
facilityId: "abd-rtyo-99e",
minutes: 43
}
我想将输出字符串设为:
4/DP1/abd-rtyo-99e/CP23/43
因此将{}
中的所有令牌替换为object中的值。因此hours
内的{}
被对象中的4
所取代,minutes
被43
所取代,依此类推。我该怎么办?
我可以使用{}
之类的正则表达式来检测{\w+}
内的字符,但不知道如何进行处理。
答案 0 :(得分:1)
您可以使用for..in
遍历对象的所有键,然后replace()
遍历原始字符串中具有key值的键
let str = '{hours}/DP1/{facilityId}/CP23/{minutes}'
const obj = {
hours: 4,
facilityId: "abd-rtyo-99e",
minutes: 43
}
let result = str;
for(let k in obj){
result = result.replace(`{${k}}`,obj[k]);
}
console.log(result)
答案 1 :(得分:1)
一种选择是匹配单词字符,并使用替换函数检查该对象上是否存在该键-如果存在,则返回相关值:
const input = '{hours}/DP1/{facilityId}/CP23/{minutes}';
const obj = {
hours: 4,
facilityId: "abd-rtyo-99e",
minutes: 43
};
const output = input.replace(
/{(\w+)}/g,
(match, possibleKey) => obj[possibleKey] ? obj[possibleKey] : match
);
console.log(output);
// 4/DP1/abd-rtyo-99e/CP23/43
答案 2 :(得分:1)
另一种选择是使用Object.entries并在替换中使用键和值:
let obj = {
hours: 4,
facilityId: "abd-rtyo-99e",
minutes: 43
};
let str = '{hours}/DP1/{facilityId}/CP23/{minutes}';
Object.entries(obj).forEach(([key, value]) => {
str = str.replace(`{${key}}`, value);
});
console.log(str);