You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式解析简单JSON键值对的匹配失败问题求助

解决VBA正则解析JSON简单键值对的问题

你要解析的JSON对象:

{"difficult:name and value with commas":"99,9%;100,00%","b":"very important value","date":"01/01/2023 21:00:00","object members":4}

原正则"([^\[\]\{\}]+)":"*([^\[\]\{\}]+)"*的问题:

  • 未处理JSON字符串允许的转义引号(\"),遇到含转义引号的值会匹配失败;
  • 未明确区分字符串值与非字符串值的边界,易出现部分匹配或多余捕获;
  • 对非字符串值的匹配未严格限制范围,可能误捕获分隔符等无效内容。

符合需求的正则表达式

要匹配排除数组/对象的简单键值对,同时支持带转义引号的字符串值和数字/布尔/null等非字符串值,可用以下正则:

"((?:\\.|[^"\\])+)":(?:("(?:\\.|[^"\\])+")|([^\[\]{},]+))

正则解析

  • 键名捕获组(第1组):"((?:\\.|[^"\\])+)"
    匹配带双引号的键名,允许内部包含转义的\",捕获结果为去掉引号的纯键名;
  • 值部分:
    • 字符串值捕获组(第2组):"(?:\\.|[^"\\])+",匹配带引号的字符串值,支持内部转义引号;
    • 非字符串值捕获组(第3组):([^\[\]{},]+),匹配数字、布尔值、null等非数组/对象的简单值,自动排除[、{、}、]、,这些数组/对象或分隔符字符。

VBA代码示例

Sub ParseJSONKeyValuePairs()
    Dim jsonStr As String
    Dim regEx As Object
    Dim matches As Object
    Dim match As Object
    
    jsonStr = "{""difficult:name and value with commas"":""99,9%;100,00%"",""b"":""very important value"",""date"":""01/01/2023 21:00:00"",""object members"":4}"
    
    Set regEx = CreateObject("VBScript.RegExp")
    With regEx
        .Pattern = """((?:\\.|[^""\\])+)""\s*:\s*(?:(""(?:\\.|[^""\\])+"")|([^\[\]{},]+))"
        .Global = True
        .MultiLine = False
    End With
    
    Set matches = regEx.Execute(jsonStr)
    
    For Each match In matches
        Dim keyName As String
        Dim valueStr As String
        
        keyName = match.SubMatches(0)
        ' 判断是字符串值还是非字符串值
        If match.SubMatches(1) <> "" Then
            ' 去掉字符串值的首尾引号
            valueStr = Mid(match.SubMatches(1), 2, Len(match.SubMatches(1)) - 2)
        Else
            valueStr = match.SubMatches(2)
        End If
        
        ' 输出结果到立即窗口
        Debug.Print "键: " & keyName & " | 值: " & valueStr
    Next match
End Sub

运行后会在VBA立即窗口输出4组符合预期的键值对。

内容的提问来源于stack exchange,提问作者Mik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:43:26