【发布时间】:2016-05-03 09:17:29
【问题描述】:
在我当前的任务中,我正在为 SVG 路径的坐标设置动画,因此我尝试根据用户更改的偏移量以编程方式更改它们的值。坐标是丑陋的属性,其值看起来像这样:
M0,383c63,0,89.3,-14.1,117.4,-65.9...
对于 100 的偏移量,新值可能需要如下所示:
M0,483c63,0,89.3,-14.1,217.4,-65.9...// without the bold (it's just there to highlight diff)
我为不同的路径传递不同的正则表达式,例如,/long(N)and...N...ugly(N)regex/,但每条路径都有不同的捕获量(我也可以传递那个数量)。使用answers here 和一个循环,我想出了如何以编程方式创建一个新更改值的数组(不管捕获的数量),给我类似['483','217.4',...] 的东西。
我的问题是,我如何以编程方式将更改后的数字替换/注入回字符串中(如上一行中的粗体数字)?
我目前的解决方法 (and a fiddle):
我通过切换括号来生成“反向”正则表达式,最终看起来像/(long)N(and...N...ugly)N(regex)/。然后我手工做东西,例如:
if (previouslyCapturedCount == 3) {
d = d.replace(reverseRE, "$1" + dValuesAltered[0] + "$2" + dValuesAltered[1] + "$3" + dValuesAltered[2] + "$4");
} else if (previouslyCapturedCount == 4) {
// and so on ...
但是一定有更好的方法,不是吗? (也许由于我缺乏 JS Skillz,我根本无法从上述链接问题的答案中推断出来。)
警告:Thereareseveralquestionshere 在 S.O.这似乎回答了如何对特定对进行多次替换,但它们似乎假设全局替换,并且我不保证匹配/捕获的数字在字符串中是唯一的。
【问题讨论】:
-
@WiktorStribiżew 不是 MCVE 吗? ;)
-
六个一个,六个另一个
-
添加了一个小提琴以希望满足 MCVE 要求。抱歉,如果问题中的抽象/省略令人讨厌。只是我经常发现那些“代码墙”问题令人讨厌。 :-)
标签: javascript arrays regex