Ваш вопрос довольно сложен для понимания, я не думаю, что он четко объясняет, что вам нужно делать, а что нет. Я не уверен, что ссылки уточняются, поскольку они не работают.
Мне кажется, я понимаю, что вы имеете в виду, но я могу ошибаться.
Если у вас есть строка типа
var test = "(674,)|(,674)"
Где 674 - это "id", и вы пытаетесь заменить "674" и ", 674" на "" get "() | ()"
Тогда ваш код должен работать нормально, за исключением того, что вам нужен также флаг "g" (глобальный), чтобы заменить ВСЕ экземпляры.
Пример:
var test = "(674,)|(,674)";
var id = "674";
var expr = new RegExp('(' + id + ',)|(,' + id + ')', 'gi');
var b = test.replace(expr, '');
alert(test);
alert(b);
Вы используете одно и то же регулярное выражение дважды, так почему бы просто не сохранить его?
Если вам интересно, почему он не заменяет экземпляры JUST "674" в дополнение к "674" или ", 675" ... это потому, что вы не написали регулярное выражение для его замены! Ваш только покрывает это запятыми.
Если это то, что вы пытаетесь сделать, замените «, 674» и «674» и просто «674» на ноль, то вот регулярное выражение, которое будет соответствовать всем этим:
var expr = new RegExp(',?' + id + ',?', 'gi');
? соответствует предыдущему символу 0 или 1 раз.
Если вам нужно сопоставить только те случаи, которые происходят с with () | (), довольно легко настроить для этого предыдущее регулярное выражение, я оставлю это в качестве упражнения для читателя.