将匹配的字符替换为object中的值

我有一个字符串如下:

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

并有一个对象是:

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

我想得到输出字符串:

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

从而用{}对象中的值替换任何内部令牌。所以hours内部{}被替换为4从对象,minutes通过43等。我怎么能这样做?

我可以{}使用正则表达式检测内部字符,{\w+}但不知道如何继续使用它。


慕娘9325324
浏览 638回答 3
3回答

猛跑小猪

一个选项是匹配单词字符,并使用replacer函数检查对象上是否存在键 - 如果是,则返回相关值: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

炎炎设计

另一种选择可能是使用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);

慕桂英546537

您可以循环使用对象的所有键,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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript