मुझे पता है कि यह मूर्खतापूर्ण है, लेकिन मैं आज सुबह रचनात्मक महसूस कर रहा हूं:
'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');