以下是一个可以匹配所有二次贝塞尔曲线的正则表达式:
```
/^(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 中,二次贝塞尔曲线的控制点是通过对称性计算出来的,因此这个正则表达式只匹配了起点和终点坐标。如果你需要获取控制点的坐标,可以使用二次贝塞尔曲线的公式进行计算。