Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replace last occurrence word in javascript [duplicate]

I have a problem with replacing last word in JS, I am still searching solution but i cannot get it.

I have this code:

var string = $(element).html(); // "abc def abc xyz"
var word   = "abc";
var newWord = "test";

var newV   = string.replace(new RegExp(word,'m'), newWord);

I want replace last word "abc" in this string, but now I can only replace all or first occurrence in string. How can I do this? Maybe is not good way?

like image 800
Beniamin Avatar asked Apr 17 '14 15:04

Beniamin


3 Answers

Here is an idea ....

This is a case-sensitive string search version

var str = 'abc def abc xyz';
var word = 'abc';
var newWord = 'test';

// find the index of last time word was used
// please note lastIndexOf() is case sensitive
var n = str.lastIndexOf(word);

// slice the string in 2, one from the start to the lastIndexOf
// and then replace the word in the rest
str = str.slice(0, n) + str.slice(n).replace(word, newWord);
// result abc def test xyz

If you want a case-insensitive version, then the code has to be altered. Let me know and I can alter it for you. (PS. I am doing it so I will post it shortly)

Update: Here is a case-insensitive string search version

var str = 'abc def AbC xyz';
var word = 'abc';
var newWord = 'test';

// find the index of last time word was used
var n = str.toLowerCase().lastIndexOf(word.toLowerCase());

// slice the string in 2, one from the start to the lastIndexOf
// and then replace the word in the rest
var pat = new RegExp(word, 'i')
str = str.slice(0, n) + str.slice(n).replace(pat, newWord);
// result abc def test xyz

N.B. Above codes looks for a string. not whole word (ie with word boundaries in RegEx). If the string has to be a whole word, then it has to be reworked.

Update 2: Here is a case-insensitive whole word match version with RegEx

var str = 'abc def AbC abcde xyz';
var word = 'abc';
var newWord = 'test';

var pat = new RegExp('(\\b' + word + '\\b)(?!.*\\b\\1\\b)', 'i');
str = str.replace(pat, newWord);
// result abc def test abcde xyz

Good luck :)

like image 109
erosman Avatar answered Sep 18 '22 05:09

erosman


// create array
var words = $(element).html().split(" ");

// find last word and replace it
words[words.lastIndexOf("abc")] = newWord 

// put it back together
words = words.join(" ");
like image 43
bobthedeveloper Avatar answered Sep 19 '22 05:09

bobthedeveloper


You can use lookahead to get last word in a sentence:

var string = "abc def abc xyz";
var repl = string.replace(/\babc\b(?!.*?\babc\b)/, "test");
//=> "abc def test xyz"
like image 25
anubhava Avatar answered Sep 22 '22 05:09

anubhava