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

如何解析含空格键名的Windows事件消息键值对并适配多格式?

解决WinCollect Windows事件消息的键值对解析问题

问题明确

需要处理两类WinCollect采集的Windows事件消息格式,同时满足核心解析需求:

格式1(值不含等号):
Security ID: S-1-5-21-xxx
Logon ID: 0x12345
Empty Key:

格式2(值含等号):
Time Created: 2024-05-20T12:30:00.000Z=UTC
Custom Field: Value=With=Multiple=Equals

核心要求:

  • 含空格的键名转PascalCase(如Security ID→SecurityId)
  • 兼容空值、等号前后空格的场景
  • 完整捕获值中包含等号的内容

改进的JavaScript解析方案

通过正向预查+非贪婪匹配的正则逻辑,同时配合键名转换、值清洗的处理逻辑,实现两类格式的兼容解析。

完整代码实现

function parseWinCollectEvent(message) {
  // 正则匹配规则:捕获键名 + 冒号+空格 + 值(直到下一个标准键名行或文本结尾)
  const regex = /([A-Za-z\s]+):\s*(.*?)(?=\n[A-Z][a-z]+\s[A-Z]|$)/gs;
  const result = {};
  
  let match;
  while ((match = regex.exec(message)) !== null) {
    const rawKey = match[1].trim();
    const rawValue = match[2].trim();
    
    // 键名转PascalCase:去空格,各单词首字母大写
    const pascalCaseKey = rawKey.split(' ')
      .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
      .join('');
    
    // 空值处理:将空字符串转为null(可按需改为空字符串)
    const value = rawValue === '' ? null : rawValue;
    
    result[pascalCaseKey] = value;
  }
  
  return result;
}

关键逻辑说明

  • 正则核心:
    • ([A-Za-z\s]+):捕获含空格的键名
    • :\s*:匹配冒号及后续任意空格
    • (.*?):非贪婪捕获值,避免截断含等号的内容
    • (?=\n[A-Z][a-z]+\s[A-Z]|$):正向预查确保值结束于**新的标准键名行(如Security ID这类大写开头+空格+大写的格式)**或文本末尾,完整保留值中的等号
  • PascalCase转换:拆分空格后的单词,统一首字母大写其余小写,拼接成无空格键名
  • 值清洗:自动去除值前后的多余空格,空值转为null(可根据业务需求调整)

测试验证

测试格式1+空值场景

const msg1 = `Security ID: S-1-5-21-xxx
Logon ID:  0x12345
Empty Key:
`;
console.log(parseWinCollectEvent(msg1));
// 输出:
// {
//   SecurityId: 'S-1-5-21-xxx',
//   LogonId: '0x12345',
//   EmptyKey: null
// }

测试格式2(值含等号)场景

const msg2 = `Time Created: 2024-05-20T12:30:00.000Z=UTC
Custom Field: Value=With=Multiple=Equals
`;
console.log(parseWinCollectEvent(msg2));
// 输出:
// {
//   TimeCreated: '2024-05-20T12:30:00.000Z=UTC',
//   CustomField: 'Value=With=Multiple=Equals'
// }

边界兼容处理

  • 键名含多个连续空格:自动trim后正常转换为PascalCase
  • 值前后含大量空格:自动trim去除冗余
  • 单一行键值对:单独一行的消息也能正确解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:42:18