用对象中的值替换匹配的字符

时间:2019-05-16 07:48:50

标签: javascript regex

我有一个字符串如下:

{hours}/DP1/{facilityId}/CP23/{minutes}

并有一个对象是:

{
  hours: 4,
  facilityId: "abd-rtyo-99e",
  minutes: 43
}

我想将输出字符串设为:

4/DP1/abd-rtyo-99e/CP23/43

因此将{}中的所有令牌替换为object中的值。因此hours内的{}被对象中的4所取代,minutes43所取代,依此类推。我该怎么办?

我可以使用{}之类的正则表达式来检测{\w+}内的字符,但不知道如何进行处理。

3 个答案:

答案 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);