替换 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"')

https://regex101.com/r/zyhPqG/1