求助:用正则表达式拆分压缩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
相关产品推荐
相关产品推荐

