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

求助:用正则表达式拆分压缩SVG路径中的实数字符串

解决SVG路径字符串拆分实数字符串数组的问题

没问题,我来帮你搞定这个SVG路径数字拆分的问题!你遇到的核心问题是原来的正则只考虑了空格和负号作为分隔标记,但没处理小数点后紧跟另一个数字/小数点的情况,导致连续的小数被错误合并了。

解决方案:用正则匹配提取合法数字

与其用split去拆分,不如直接用match提取所有符合SVG路径规则的实数。SVG里的实数格式包括:

  • 带正负号的(如-5.3、+2.1)
  • 小数点开头的(如.1、-.2)
  • 整数形式(如15、-3)

对应的正则表达式是:/[-+]?\d*\.?\d+/g,我们来拆解一下:

  • [-+]?:匹配可选的正负号
  • \d*:匹配零个或多个数字(允许整数部分为空,比如.1)
  • \.?:匹配可选的小数点
  • \d+:匹配至少一个数字(确保不会匹配单独的小数点,SVG路径里不会有这种无效格式)
  • g:全局匹配所有符合规则的片段

完整代码示例

var path = 'c15.1-5.3.1-.1.1-.2.1';
// 先去掉开头的路径命令字符(比如这里的'c'),再提取所有数字
var numbers = path.slice(1).match(/[-+]?\d*\.?\d+/g);
console.log(numbers);
// 输出:["15.1", "-5.3", ".1", "-.1", ".1", "-.2", ".1"]

这个方法不仅解决了你当前的案例,还能兼容其他常见的SVG路径数字格式,比如M100,200L150.5-50这类带逗号的(如果有逗号的话,你可以先把逗号替换掉,比如path.replace(/,/g, '').slice(1).match(...))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:12:27