首页 > 解决方案 > 在保持 JSON 文件完整的同时替换 Javascript 中的字符串

问题描述

我正在使用 Discord 机器人,并且有一个名为 config.json 的 JSON 文件,如下所示:

{
"token": "stuff"
"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"

我怎样才能让它只替换一行并保持文件的其余部分完好无损?

标签: javascriptstringreplacediscord.js

解决方案


不要为此使用正则表达式,这会使事情变得比需要的复杂得多。用于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


推荐阅读