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

求提取SGF节点键值对的JavaScript/TypeScript正则表达式

提取SGF节点键值对的JavaScript/TypeScript正则方案

需求说明

SGF节点内数据以「键[值]」的连续键值对形式存储,键长度无固定限制(常见为2字符),值可包含特殊字符(如版本号里的冒号、日期里的横杠等),落子格式为B[坐标]或W[坐标],需要匹配所有合法键值对并转换为键值对象。

核心正则表达式

const sgfKVRegex = /([^\[\]]+)\[([^\]]*)\]/g;

匹配逻辑拆解

  • ([^\[\]]+):捕获键部分,匹配所有非方括号的字符,支持任意长度的键(如GM、B、AP都能命中)
  • \[:匹配左方括号(转义是因为方括号在正则中属于特殊语法字符)
  • ([^\]]*):捕获值部分,匹配左括号后到右括号前的所有内容,兼容空值、含特殊字符的值
  • \]:匹配右方括号
  • g:全局修饰符,用于遍历字符串中所有符合规则的键值对

实战使用示例(TypeScript)

const sgfNodeContent = `GM[1]FF[4]CA[UTF-8]AP[Sabaki:0.52.2]KM[6.5]SZ[19]DT[2023-12-25]B[aa]W[bb]`;
const sgfKVRegex = /([^\[\]]+)\[([^\]]*)\]/g;
const kvObject: Record<string, string> = {};

let matchResult;
while ((matchResult = sgfKVRegex.exec(sgfNodeContent)) !== null) {
  const [_, key, value] = matchResult;
  kvObject[key] = value;
}

console.log(kvObject);
// 输出:
// {
//   GM: '1',
//   FF: '4',
//   CA: 'UTF-8',
//   AP: 'Sabaki:0.52.2',
//   KM: '6.5',
//   SZ: '19',
//   DT: '2023-12-25',
//   B: 'aa',
//   W: 'bb'
// }

特殊场景兼容

如果值中存在转义的右括号(如\]),需要使用兼容转义的正则:

const sgfKVWithEscapeRegex = /([^\[\]]+)\[((?:\\]|[^\]])*)\]/g;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:15:05