Я знаю, что это глупо, но я чувствую себя творческим утром:
'one two, one three, one four, one'
.split(' ') // array: ["one", "two,", "one", "three,", "one", "four,", "one"]
.reverse() // array: ["one", "four,", "one", "three,", "one", "two,", "one"]
.join(' ') // string: "one four, one three, one two, one"
.replace(/one/, 'finish') // string: "finish four, one three, one two, one"
.split(' ') // array: ["finish", "four,", "one", "three,", "one", "two,", "one"]
.reverse() // array: ["one", "two,", "one", "three,", "one", "four,", "finish"]
.join(' '); // final string: "one two, one three, one four, finish"
Так на самом деле, все, что вам будет нужно сделать, это добавить эту функцию для струнного прототипа:
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');
Хорошая идея. Необходимо сначала избежать этой строки (хотя и не с предоставленными ею образцами данных), что нетривиально. :-( –
Большое спасибо – Ruth
@Ruth no prob! @TJ да, действительно, это правда: Рут, если вы закончите словами «слова», которые вы ищете, включая специальные символы, используемые для регулярных выражений, вам понадобится чтобы «убежать» от тех, что, как говорит TJ, немного сложнее (не невозможно, хотя). – Pointy