我正在尝试为自己构建一个快速而脏的静态站点生成器。
假设我有这个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}
你可以在那里看到问题。我认为它总是用输入文件替换已编辑的文件,所以我没有看到任何变化。我无法弄明白,如果有人能指出我正确的方向,我将不胜感激。
谢谢!
答案 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]);