簡體   English   中英

如何將字符串 {} 值替換為 obj(鍵值)

[英]How to replace string {} value to obj (key value)

我最近開始在 nodeJs 上編程。

我有不同的字符串和 Json 對象;

例如:

var str = 'My name is {name} and my age is {age}.';
var obj = {name : 'xyz' , age: 24};


var str = 'I live in {city} and my phone number is {number}.';
var obj = {city: 'abc' , number : '45672778282'};

我如何自動執行此過程,因此使用 string 和 obj 我會將 string {} 值替換為 obj(鍵值)。

我試過 PUG 但無法解析。

pug.render(str, obj);

對我不起作用。

讓我們看看,您想要制作類似模板的東西,就像把手http://handlebarsjs.com/ 一樣

我會給你這個例子來為你制作一個簡單的把手:

function render(template, properties)
{
     var result = template;
     for (i in properties)
     {
         result = result.replace("{"+i+"}",properties[i]);
     }
     return result;
}

但是這個只會改變各自屬性的第一次出現,如果你願意,你可以用它來替換整個模板中的所有屬性:

function render(template, properties)
{
     var result = template;
     for (i in properties)
     {
         var reg = new RegExp("{"+i+"}","g");
         result = result.replace(reg,properties[i]);
     }
     return result;
}

這是主題的變體。

var str = 'My name is {name} and {name} my age is {age}.';
var obj = {name : 'xyz' , age: 24};

var render = function (str, obj) {
    return Object.keys(obj).reduce((p,c) => {
        return p.split("{" + c + "}").join(obj[c])
    }, str)
}

render(str, obj)

我認為您不應該重新發明輪子,因為最簡單的解決方案是使用一些流行的節點模塊。

我建議'sprintf-js'。

在此處查看我的示例代碼,

const sprintfJs = require('sprintf-js')

const template = 'hello %(name)s today is %(day)s'
const data = {
  name: 'xxxx',
  day: 'Tuesday'
}

const formattedString = sprintfJs.sprintf(template, data)
console.log(formattedString)

這可以通過單個替換調用實現。

var obj = {name : 'xyz' , age: 24};
let c_obj = {};
let wordArr = [];

const res = str.matchAll("{.*?}");

for(const match of res){

    c_obj[match[0]] =  obj[match[0].slice(1,-1)];
    wordArr.push(match[0]);

}

let new_str = str.replace(new RegExp(wordArr.join('|'),'g'), match => c_obj[match]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM