Потому что * по умолчанию жаден, т.е берёт от жизни всё.
Иначе и такой вариант возможен:
text='<span class="bold js-clone-url-permission">Read+Write</span> access';
replacePattern="До $1 После";
result=text.replace(/(.*?)/g, replacePattern);
alert( result );