Поскольку вам нужно удалить запятую в двух возможных местах, единственный вариант, который я вижу для этого с одним регулярным выражением, - это альтернатива:
// vvvvvvvvvvvvv−−−−−−−−−−−−−−−−−−−−−−−−−−−−− first alternative
text = text.replace(/,[^,]*?remove|(?<=\()[^,]*?remove,/g, '');
// ^^^^^^^^^^^^^^^^^^^^−−−−−−−− second alternative
Альтернативы - это ваше исходное выражение, которое соответствует другим чем in_p1
, и альтернатива, которая соответствует in_p1
и удаляет запятую после него (а не перед ним).
Пример:
let text = `select * from my_functions (in_p1 := remove,
in_p2 := $1,
in_p3 := remove,
in_p4 := $2,
in_p5 := remove,
in_p5_ := remove,
in_p6 := $3,
in_p7 := remove)`;
text = text.replace(/,[^,]*?remove|(?<=\()[^,]*?remove,/g, '');
console.log(text);
Обратите внимание, что здесь используется просмотр назад для (
. Поиск назад относительно новый для JavaScript. Я думаю, что мы можем избавиться от просмотра назад, если ваша целевая платформа не поддерживает его, используя захват:
text = text.replace(/,[^,]*?remove|(\()[^,]*?remove,/g, '$1');
Пример:
let text = `select * from my_functions (in_p1 := remove,
in_p2 := $1,
in_p3 := remove,
in_p4 := $2,
in_p5 := remove,
in_p5_ := remove,
in_p6 := $3,
in_p7 := remove)`;
text = text.replace(/,[^,]*?remove|(\()[^,]*?remove,/g, '$1');
console.log(text);
Обратите внимание, что я добавил туда дополнительный параметр, чтобы дважды проверить, правильно ли были удалены два параметра «удалить» в строке.