Tôi biết điều này là ngớ ngẩn, nhưng tôi cảm thấy sáng tạo:
'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"
Vì vậy, tất cả những gì bạn cần làm là thêm chức năng này vào nguyên mẫu chuỗi:
String.prototype.replaceLast = function (what, replacement) {
return this.split(' ').reverse().join(' ').replace(new RegExp(what), replacement).split(' ').reverse().join(' ');
};
Sau đó chạy nó như vậy:
str = str.replaceLast('one', 'finish');
Một hạn chế mà bạn nên biết là, vì hàm được phân tách theo không gian, bạn có thể thể không thể tìm / thay thế bất kỳ thứ gì bằng khoảng trắng.
Trên thực tế, bây giờ tôi nghĩ về nó, bạn có thể giải quyết vấn đề 'không gian' bằng cách tách với một mã thông báo trống.
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');