Я знаю, что это глупо, но сегодня утром я чувствую себя творчески:
'one two, one three, one four, one'
.split(' ')
.reverse()
.join(' ')
.replace(/one/, 'finish')
.split(' ')
.reverse()
.join(' ');
На самом деле, все, что вам нужно сделать, это добавить эту функцию к прототипу String:
String.prototype.replaceLast = function (what, replacement) {
return this.split(' ').reverse().join(' ').replace(new RegExp(what), replacement).split(' ').reverse().join(' ');
};
Затем запустите его так:
str = str.replaceLast('one', 'finish');
Вы должны знать одно ограничение: поскольку функция разбивается по пробелу, вы, вероятно, не сможете найти / заменить что-либо с пробелом.
На самом деле, теперь, когда я думаю об этом, вы можете обойти проблему «пространства», разделив с помощью пустого токена.
String.prototype.reverse = function () {
return this.split('').reverse().join('');
};
String.prototype.replaceLast = function (what, replacement) {
return this.reverse().replace(new RegExp(what.reverse()), replacement.reverse()).reverse();
};
str = str.replaceLast('one', 'finish');