替换文件循环中的多个值

时间:2013-11-08 19:49:43

标签: javascript node.js

我正在尝试为自己构建一个快速而脏的静态站点生成器。

假设我有这个test.html文件:

{title}
{downloadpath}

这是我的current.json,我在其中获取了我想要替换的值:

{
    "id": 123,
    "album" : [{
        "title": "Test EP",
        "albumid": 1234,
        "path": "test.zip"
     }]
}

我的替换功能如下:

    // Iterate through JSON object and replace
    function iterate(obj) {
        for (var property in obj) {
            if (obj.hasOwnProperty(property)) {
                if (typeof obj[property] == "object")
                    iterate(obj[property]);
                else
                console.log("replace {" + property + "} with " + obj[property] )
                htmldata.replace(/\{property\}/g, obj[property]);
            }
        }
    }
    iterate(json)
    var result = htmldata

    console.log(result)

    // Write new HTML
    fs.writeFile("test-" + json.id + ".html", result, 'utf8', function (err) {
        if (err) {
            return console.log(err);
        }
    });

如果我运行它就像这样:

replace {id} with 123
replace {title} with Test EP
replace {albumid} with 1234
replace {path} with test.zip
{title}
{path}

你可以在那里看到问题。我认为它总是用输入文件替换已编辑的文件,所以我没有看到任何变化。我无法弄明白,如果有人能指出我正确的方向,我将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:3)

if语句周围不使用大括号会导致细微的错误!

你想:

if (typeof obj[property] == "object") {
    iterate(obj[property]);
} else {
    console.log("replace {" + property + "} with " + obj[property] )
    htmldata.replace(/\{property\}/g, obj[property]);
}

否则replace每次都会运行,无论if上的情况如何。

第二件事:你的正则表达式尝试匹配文字字符串"{property}"。相反,试试这个:

htmldata.replace(new RegExp("{" + property + "}", "g"), obj[property]);

第三件事:您没有将replace 的结果分配给htmldata。所以你需要这样做:

htmldata = htmldata.replace(new RegExp("{" + property + "}", "g"), obj[property]);