我正在寻找一个匹配SVG路径中每个单独值的正则表达式。
m4507-396.4c-2.2-3.5-2.6-7.3-0.2-11.4M4545.5-428.7c3.5 1.2 7 2.7 9.9 7.3 5.5 8.3 3.7 20.7 3 22.4-2.6 6.6-6.5 9.4-10.1 12.7-1.6 6-6 4.8-9.7 5.4-3.9 3.5-9.4 4.3-11.8 4.3-11.8 0.1
m3918.1-733.6c-7.7-0.7-18-5.3-23.5-10.5-5.6-5.2-11.6-15.5-12.1-20.5-0.3-3.2 0.4-4.5 3.2-5.7 1.8-0.8 2.6-0.8 7.2-0.6 4.6 0.2 12.9 1.6 13.5 2.2 0.1 0.1-1 2.3-2.6 4.9-4.3 7.1-4.3 7.2-3.6 8.9 0.8 2 4.2 4.7 8 6.6 2.8 1.4 3.6 1.6 6.2 1.6l3 0 3.4-5.4c1.9-3 3.5-5.4 3.7-5.5 0.5-0.2 7.2 10.1 8.5 13 0.7 1.5 1.3 3.6 1.4 5.1 0.2 2.3 0.1 2.6-1.1 3.7-2.2 2-8 2.9-15.2 2.2z
m 3726.1737,-460.61233 36.0937,-2.74129 c 8.4162,-1.4953 14.662,-7.69317 13.4018,-30.15418 -13.0333,-2.66897 -13.7567,-3.44411 -16.7523,-4.56882
我已经包含了3个如何格式化路径数据的示例。
值可以用逗号或空格分隔,两个值可能会被“ - ”字符“触摸”,所以它也需要将它们分开。
First Path Data Match Example:- Third Path Data Match Example:-
Match 1: m Match 1: m
Match 2: 4507 Match 2: 3726.1737
Match 3: 396.4 Match 3:-460.61233
Match 4: c Match 4: -2.74129
Match 5: c
等等。你明白了。有没有人遇到过这个?
答案 0 :(得分:0)
不关心语义的词法分析器很容易:
\([mzlhvcsqta]|[\+\-]?(\d*\.\d+|\d+\.?)([eE][\+\-]?\d+)*)\i
SVG路径数据由单字母命令和数字组成。每个令牌都是一个命令字母:
[mzlhvcsqta]
每个都可以以大写或小写形式出现,因此搜索必须不区分大小写(\i
)。
或者它是一个数字:(为了便于阅读,分成多行)
[\+\-]? // an optional sign
(\d*\.\d+|\d+\.?) // an integer or a decimal number
([eE][\+\-]?\d+)* // the exponential part of the scientific notation
接下来要做的就是分析令牌的顺序。例如,命令后面的数字计数可以在1到7之间变化,其中一些可以是任何数字,其他只有正数或标志(0或1)。但这不是 lexer 的一部分,也可能会过度压缩RegEx所能做的事情。