В моей текущей задаче я анимирую координаты SVG-путей, поэтому я пытаюсь программно изменить их значения в зависимости от смещения, которое пользователь меняет. Координаты в уродливых атрибутов, значения которых выглядит примерно так:Замените regex capture на значения из массива (javascript)
M0,383c63,0,89.3, -14.1,117.4, -65,9 ...
Для смещения 100, то новое значение, возможно, потребуется смотреть что-то вроде:
M0, c63,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/
, но каждый пат h имеет другое количество захватов (я могу пройти и в этом количестве). Используя answers here и цикл, я выяснил, как программно создавать массив вновь измененных значений (независимо от количества захватов), давая мне что-то вроде ['483','217.4',...]
.
Мой вопрос:, как программно заменить/вставить измененные числа обратно в строку (как в строке выше с выделенными цифрами)?
Мой обходной путь на данный момент ( and a fiddle):
Я генерируя «Reverse» регулярное выражение, переключаясь скобки вокруг, которая заканчивается глядя, как /(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, я просто был не в состоянии экстраполировать из ответов на выше связанный вопросе.)
Оговорка: There are several questions here на С.О. которые, похоже, отвечают, как выполнять множественные замены на определенных парах, но они, похоже, принимают глобальные замены, и у меня есть , не гарантируя, что совпадающие/записанные числа будут уникальными в строке.
Просьба указать [MVCE (минимальный полный проверяемый пример)] (http://stackoverflow.com/help/mcve). –
@ WiktorStribiżew не MCVE intead? ;) –
Шесть из одного, полдюжины других –