gpt4 book ai didi

regex - 使用 VBScript 查找和替换 JSON 文件中节点的大括号之间的所有多行文本

转载 作者:行者123 更新时间:2023-12-04 05:22:11 38 4
gpt4 key购买 nike

作为 Windows 登录脚本的一部分(因此需要 VBScript),我想在用户的 Google Chrome 首选项(存储在用户配置文件的 JSON 文件中)中设置值,以便在他们登录时应用下载设置。

我正在努力实现以下目标:

  • 打开一个 JSON 文件( %userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Preferences )并将内容读取为字符串;
  • 搜索名为“download”的特定节点,该节点预先填充了可能因构建而异的多行值;
  • 用指定的多行文本替换大括号之间的整个文本;和
  • 将更新后的字符串写入原始文件并保存。

  • 完整的 JSON 文件相当大,但作为用作输入的示例,这是从典型的 Google Chrome 首选项 JSON 文件复制的:
    "bookmark_bar": {
    "show_on_all_tabs": false
    },
    "download": {
    "directory_upgrade": true,
    "prompt_for_download": false
    },
    "sync": {
    "suppress_start": true
    },

    我想以编程方式搜索“下载”节点,并替换此节点的大括号之间的所有内容,使其显示为:
    "download": {
    "default_directory": "C:\\Windows\\Temp",
    "extensions_to_open": "pdf",
    "prompt_for_download": false
    },

    ...文件的其余内容保持不变。

    鉴于要替换的 JSON 部分中的空格和多行,以及在大括号之间包含所有/任何文本的通配符要求,我无法使用 VBScript Replace 函数执行此操作,但我的 RegEx 知识有限.

    最佳答案

    您可以使用正则表达式进行替换:

    prefsFile = "%userprofile%\Local Settings\...\Preferences"
    prefsFile = CreateObject("WScript.Shell").ExpandEnvironmentStrings(prefsFile)

    newPrefs = "..."

    Set fso = CreateObject("Scripting.FileSystemObject")

    json = fso.OpenTextFile(prefsFile).ReadAll

    Set re = New RegExp
    re.Pattern = """download"": {[\s\S]*?},"

    json = re.Replace(json, """download"": {" & vbCrLf & newPrefs & vbCrLf & "},")

    fso.OpenTextFile(prefsFile, 2).Write(json)

    图案 [\s\S]匹配任何空白或非空白字符。您不能使用 .在这种情况下,因为该特殊字符不匹配换行符,并且您希望表达式跨越多行。预选赛 *?分别表示“匹配任意数量的字符”和“使用最短匹配”。这样,表达式匹配 "download": 之后一对大括号之间的所有内容。关键字。

    关于regex - 使用 VBScript 查找和替换 JSON 文件中节点的大括号之间的所有多行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13588622/

    38 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com