有匹配所有二次贝塞尔曲线的正则吗

动态 未结 0 71
小小草
小小草 LV1 2023年9月23日 23:40 发表
以下是一个可以匹配所有二次贝塞尔曲线的正则表达式: ``` /^(M\s*([\d.]+)\s*,\s*([\d.]+)\s*)?Q\s*([\d.]+)\s*,\s*([\d.]+)\s*\s*([\d.]+)\s*,\s*([\d.]+)\s*$/ ``` 这个正则表达式包含了两个捕获组,分别对应起点和终点坐标。如果路径命令中没有起点,则第一个捕获组会返回 `undefined`。 你可以使用 JavaScript 的 `match()` 方法来检查一个字符串是否符合这个正则表达式,并提取出其中的坐标信息。例如: ```javascript const path = 'M10,10 Q50,50 100,100'; const match = path.match(/^(M\s*([\d.]+)\s*,\s*([\d.]+)\s*)?Q\s*([\d.]+)\s*,\s*([\d.]+)\s*\s*([\d.]+)\s*,\s*([\d.]+)\s*$/); if (match) { const [, , x1, y1, x2, y2] = match.map(parseFloat); const p0 = { x: x1, y: y1 }; const p2 = { x: x2, y: y2 }; console.log(p0, p2); // { x: 10, y: 10 } { x: 100, y: 100 } } ``` 注意,在 SVG 中,二次贝塞尔曲线的控制点是通过对称性计算出来的,因此这个正则表达式只匹配了起点和终点坐标。如果你需要获取控制点的坐标,可以使用二次贝塞尔曲线的公式进行计算。
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复