替换 Javascript 中的字符串,同时保持 JSON 文件完整
Replacing a string in Javascript while keeping JSON file intact
我正在使用 Discord 机器人并有一个名为 config.json 的 JSON 文件,如下所示:
{
"token": "stuff"
"prefix": "!"
}
我想替换 "prefix: "!" 行。我的代码是这样的:
if(cmd == "prefix"){
var new_prefix = "\"prefix\": " + "\"" + String(args[0]) + "\"";
var data = fs.readFileSync("config.json", "utf-8");
var newValue = data.replace(/"prefix"\s*:\s*".+"/gm, "new_prefix");
fs.writeFileSync("config.json", new_prefix, "utf-8");
};
它不是只替换一行,而是覆盖了我的整个 config.JSON 文件,因此它看起来像这样:
"prefix":"stuffHere"
如何让它只替换一行而文件的其余部分保持不变?
不要为此使用正则表达式,这会使事情变得比实际需要的复杂得多。使用JSON.parse
把JSON字符串变成对象,赋值给对象上的prefix
属性,然后写入字符串化对象:
if(cmd == "prefix"){
var dataJSON = fs.readFileSync("config.json", "utf-8");
var data = JSON.parse(dataJSON);
data.prefix = "new_prefix";
fs.writeFileSync("config.json", JSON.stringify(data), "utf-8");
}
如果您 不得不 为此使用正则表达式,无论出于何种原因,那么您不仅必须用新值替换 "prefix": "<oldvalue>"
,而且也使用前缀 属性。匹配值时(以 "
开头),惰性重复任何字符,直到到达另一个 "
,如果字符串也不包含双引号:
.replace(/"prefix": *".*?"/, '"prefix": "new prefix"')
我正在使用 Discord 机器人并有一个名为 config.json 的 JSON 文件,如下所示:
{
"token": "stuff"
"prefix": "!"
}
我想替换 "prefix: "!" 行。我的代码是这样的:
if(cmd == "prefix"){
var new_prefix = "\"prefix\": " + "\"" + String(args[0]) + "\"";
var data = fs.readFileSync("config.json", "utf-8");
var newValue = data.replace(/"prefix"\s*:\s*".+"/gm, "new_prefix");
fs.writeFileSync("config.json", new_prefix, "utf-8");
};
它不是只替换一行,而是覆盖了我的整个 config.JSON 文件,因此它看起来像这样:
"prefix":"stuffHere"
如何让它只替换一行而文件的其余部分保持不变?
不要为此使用正则表达式,这会使事情变得比实际需要的复杂得多。使用JSON.parse
把JSON字符串变成对象,赋值给对象上的prefix
属性,然后写入字符串化对象:
if(cmd == "prefix"){
var dataJSON = fs.readFileSync("config.json", "utf-8");
var data = JSON.parse(dataJSON);
data.prefix = "new_prefix";
fs.writeFileSync("config.json", JSON.stringify(data), "utf-8");
}
如果您 不得不 为此使用正则表达式,无论出于何种原因,那么您不仅必须用新值替换 "prefix": "<oldvalue>"
,而且也使用前缀 属性。匹配值时(以 "
开头),惰性重复任何字符,直到到达另一个 "
,如果字符串也不包含双引号:
.replace(/"prefix": *".*?"/, '"prefix": "new prefix"')