如何解决如何在Go中使用Regex匹配,提取然后替换json字符串中的组?
场景
假设我有一个数据库查询字符串,如下所示:
{
"$or": [
{ "docType": "user" },{ "docType": "userMeta" }
]
}
以及基于docType
rules := map[string]string{
"user": `"createdBy": "thisuserID"`,"userMeta": `"relatedUser": "thisuserID"`,}
因此,从该查询字符串中,我需要:
- 提取每个
docType
- 在规则图中查找该文档类型的规则
- 将该规则附加到查询中的匹配文档类型,最终以如下查询结束:
{
"$or": [
{ "docType":"user","createdBy":"thisuserID" },{ "docType":"userMeta","createdBy":"thisuserID" }
]
}
我当前的代码
// `"doctype":"xxxxx"` is group 1 and `xxxxx` is group 2.
pattern := regexp.MustCompile(`(?m)("docType":\s?"(\w+)")`)
matches := pattern.FindAllStringSubmatchIndex(queryString,-1)
for _,submatches := range matches {
// Pick out the doctype from the query
var docType []byte
docType = pattern.ExpandString(docType,"$2",q,submatches)
rule := rules[string(docType)]
}
这段代码正确地提取了docType
,我当然可以从中正确查找规则。
我不知道该怎么做,然后用{ "docType": "user" }
替换每个{ "docType": "user","createdBy":"thisuserID" }
。
我的想法
- 使用初始正则表达式执行ReplaceAll不会产生正确的结果(每个结果都将覆盖最后一个)。
- 我可以使用特定的
docType
构造一个新的正则表达式,但是由于匹配已经完成,因此在同一字符串上进行另一个正则表达式匹配似乎效率低下。 - 我可以一些如何使用索引并直接在那些索引处替换字符串吗?
- 也许
json.Marshal
更快然后遍历整个地图? - 必须有效率更高的东西...?
任何帮助将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。