可以使用以下函数来解析 SVG 中的二次贝塞尔曲线路径命令,返回起点 `p0`、控制点 `p1` 和终点 `p2`:
```javascript
function parseQuadraticBezier(path) {
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) return null;
const [, , x1, y1, x2, y2] = match.map(parseFloat);
const p0 = { x: x1 || 0, y: y1 || 0 };
const p1 = { x: x2, y: y2 };
const p2 = { x: parseFloat(match[5]), y: parseFloat(match[6]) };
return { p0, p1, p2 };
}
```
这个函数接受一个字符串参数 `path`,表示 SVG 中的二次贝塞尔曲线路径命令。如果该命令不是合法的二次贝塞尔曲线,则返回 `null`。
如果命令是合法的,则函数会返回一个对象,包含三个属性 `p0`、`p1` 和 `p2`,分别表示起点、控制点和终点的坐标。例如:
```javascript
const path = 'M10,10 Q50,50 100,100';
const curve = parseQuadraticBezier(path);
console.log(curve); // { p0: { x: 10, y: 10 }, p1: { x: 50, y: 50 }, p2: { x: 100, y: 100 } }
```
注意,这个函数假设 SVG 中的二次贝塞尔曲线路径命令是合法的,并且没有使用相对坐标。如果你需要支持相对坐标或其他特殊情况,请根据需要进行修改。