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

如何编写正则表达式修复Figma API返回的畸形矢量路径字符串

矢量路径字符串格式修正正则方案

核心匹配逻辑

我们需要处理两类紧挨着的非法拼接场景:

  • 路径命令字母后直接接数字/负号(如M0、L-2)
  • 数字后直接接路径命令字母(如0L、4Z)
    正则仅匹配SVG标准定义的路径命令字母M/m、L/l、H/h、V/v、C/c、S/s、Q/q、T/t、A/a、Z/z,不会误判科学计数法里的指数标记e/E。

正则表达式及替换规则

一步到位方案(零宽断言匹配位置,直接插入空格)

匹配正则:

(?<=\d)(?=[mlhvcsqtazMLHVCSQTAZ])|(?<=[mlhvcsqtazMLHVCSQTAZ])(?=\d|-)

替换内容:单个空格

兼容性分步方案(部分老旧语言不支持零宽断言时使用)

第一步:处理数字后接路径命令的场景
匹配正则:

(\d)([mlhvcsqtazMLHVCSQTAZ])

替换为:$1 $2(部分语言用\1 \2作为分组占位符)

第二步:处理路径命令后接数字/负号的场景
匹配正则:

([mlhvcsqtazMLHVCSQTAZ])(\d|-)

替换为:$1 $2

常用语言实现示例

JavaScript 示例

const invalidPath = 'M0 0L1.33333 0L1.33333 4L4.44089e-16 4L0 0Z';
const validPath = invalidPath.replace(/(?<=\d)(?=[mlhvcsqtazMLHVCSQTAZ])|(?<=[mlhvcsqtazMLHVCSQTAZ])(?=\d|-)/g, ' ');
// 输出结果:M 0 0 L 1.33333 0 L 1.33333 4 L 4.44089e-16 4 L 0 0 Z

Python 示例

import re
invalid_path = 'M0 0L1.33333 0L1.33333 4L4.44089e-16 4L0 0Z'
valid_path = re.sub(r'(?<=\d)(?=[mlhvcsqtazMLHVCSQTAZ])|(?<=[mlhvcsqtazMLHVCSQTAZ])(?=\d|-)', ' ', invalid_path)
# 输出结果:M 0 0 L 1.33333 0 L 1.33333 4 L 4.44089e-16 4 L 0 0 Z

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:48:03