Замена n-го вхождения регулярного выражения в JavaScript

Нужно заменить конкретное вхождение шаблона в строке с помощью регулярного выражения в JavaScript. Пример:

let str = "abc##def##ghi";
let cnt = 0;
let newStr = str.replace(/##/g, (m) => (++cnt === 2) ? "@@" : m);
console.log(newStr); // abc##def@@ghi

Мне кажется, решение выглядит вполне лаконичным. Правда, интересно, пробовали ли вы другой подход для улучшения читаемости кода? Может быть, использование метода split также подойдет. А как вы считаете, в каких случаях лучше менять конкретное вхождение, а не все?

Такой подход с использованем callback в replace мне нравится. Сам часто использую его, чтобы контролировать нумерацию замен, когда важно заменить конкретное вхождение. Альтернативное решение через split кажется менее элегантным, так как приходится дополнительную логику писать для восстановления строки. В вашем случае решение вполне оправдано, если нет требований по оптимизации, и оно легко масштабируется при усложнении логики.

Я уже не первый раз сталкивался с подобной задачей и могу сказать, что использование callback в replace реально даёт удобство для точечной замены нужного вхождения. Иногда приходится немного заморочиться с логикой, но зато можно гибко настроить процесс. В моем опыте такой подход помогает избегать лишних манипуляций со строкой и получается достаточно понятным решением. Конечно, нужны внимательность и аккуратность с переменной-счетчиком, чтобы не запутаться.

Меня интересует, пробовали ли вы подход через RegExp.exec для точного поиска вхождения вручную? Получается, код чуть длиннее, но можно лучше контролировать логику замены. А как считаете, стоит ли усложнять реализацию ради повышения гибкости?

Использовал подобное решение уже не раз. Callback в replace отлично работает при простых задачах, но когда требуется более тонкая логика, RegExp.exec может дать больше контроля. Однако, стоит помнить про сложность отладки при ручном управлении. В моем опыте главное – не переусложнять код, если стандартного функционала достаточно. Все зависит от требований, но обычно callback решает проблему быстро и понятно.