javascript - 在保持 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"
我怎样才能让它只替换一行并保持文件的其余部分完好无损?
解决方案
不要为此使用正则表达式,这会使事情变得比需要的复杂得多。用于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"')
推荐阅读
- swift - 用十六进制,八进制和二进制写整数有什么意义?
- microservices - Spring Cloud Netflix & Spring Cloud Data Flow 微服务架构
- c++ - ZeroMq:打开的文件太多.. fd 使用量在同一对象上持续增长
- python-2.7 - Matplotlib 在使用 plt.savefig() 时失去绘图功能
- java - 登录功能中出现意外的令牌错误
- java - 从日期格式中排除毫秒(jackson + java 8 日期)
- c++ - wxImageList::Add() 总是返回 0
- azure - 如何使用 Cosmos DB 触发器从 Azure Function 中的 Azure Cosmos DB 中断中恢复
- javascript - React.js如何将索引作为道具从this.props数组传递给子组件
- java - 如何创建 CMIS 服务器