Да, это может сделать ReDoS , если вы получите что-то после #
Измените его на /(.*)(#)$/i
Это будет работать
console.log('12345678901234567890#12345'.replace(/(.*)(#)$/i, '$1'));
но это повешит ваш браузер
console.log('12345678901234567890#12345'.replace(/(.*)+(#)$/i, '$1'));
Если вы хотите сопоставить все до #
, используйте ^([^#]*)
console.log('/11586258/mozhet-regulyarnoe-vyrazhenie-javascript-vyzvat-sboi-brauzera-kak-rabotaet-urlpath-urlpath-replace-razbilsya-hrom'.match(/^([^#]*)/)[0]);