Ich weiß, dass das albern ist, aber ich fühle mich heute Morgen kreativ:
'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"
Alles, was Sie tun müssen, ist, diese Funktion zum String-Prototyp hinzuzufügen:
String.prototype.replaceLast = function (what, replacement) {
return this.split(' ').reverse().join(' ').replace(new RegExp(what), replacement).split(' ').reverse().join(' ');
};
Dann führen Sie es so aus:
str = str.replaceLast('one', 'finish');
Eine Einschränkung, die Sie kennen sollten, ist, dass Sie wahrscheinlich nichts durch ein Leerzeichen finden / ersetzen können , da die Funktion nach Leerzeichen aufgeteilt wird .
Jetzt, wo ich darüber nachdenke, könnten Sie das Platzproblem umgehen, indem Sie es mit einem leeren Token aufteilen.
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');