Делать расчеты на регулярное выражение захвата группы в залп

Мне нужно написать скрипт для реструктуризации некоторого кода в новый синтаксис, а также умножения \ деления некоторых существующих значений.

TLDR:

Например я хочу включить:

oldFunction(3, "text");
oldSize = 3;

в

newfunction("text", 3);
newSize = 6; //notice that this is oldSize*2

Мне удалось заменить и переупорядочить часть с помощью gulp-replace и regex, но я не знаю, как умножить числа в группах захвата regex.

ПОЛНЫЙ:

Более подробный пример:

font size = 34px;
text position = {5, 42};

Я использую регулярное выражение и gulp-replace, чтобы реструктурировать его в новый синтаксис:

.pipe($.replace(/font size = (.+)px;\ntext position = {(.+), (.+)}/g, 'createText($2, $3, $1);'))

И я получаю:

createText(5, 42, 34);

Все старые добрые номера теперь в правильном порядке!

Теперь проблема: могу ли я как-то выполнить основные математические манипуляции (умножение, деление) со старыми числами перед заменой?

Также. Если для такой задачи найдется более практичный инструмент - я буду рад его использовать.

1 ответ

Решение

Вы можете использовать обычный метод анонимного обратного вызова внутри.replace чтобы иметь возможность манипулировать групповыми значениями.

.pipe($.replace(/font size = (.+)px;\ntext position = {(.+), (.+)}/g, function($0,$1,$2,$3) { 
    return 'createText(' + $2 + ', ' + $3 + ', ' + $1*2 + ');'; 
 }))

Последнее значение будет умножено на 2.

Вы должны рассмотреть возможность использования шаблона сопоставления цифр ([0-9]+) вместо подстановочного знака .+ (где . соответствует любому символу, кроме символа разрыва строки) для такого кода для безопасной работы.

Другие вопросы по тегам