Javascript заменить последнее вхождение строки

Я прочитал много Q & Как и в StackOverflow, и мне все еще сложно получить Regex. У меня строка 12_13_12.

Как я могу заменить последнее вхождение 12 с помощью aa.

Конечный результат должен быть 12_13_aa.

Мне бы очень хотелось получить хорошее объяснение о том, как вы это сделали.

Ответ 1

newString = oldString.substring(0,oldString.lastIndexOf("_")) + 'aa';

Ответ 2

Вы можете использовать эту замену:

var str = '12-44-12-1564';
str = str.replace(/12(?![\s\S]*12)/, 'aa');
console.log(str);

объяснения:

(?!            # open a negative lookahead (means not followed by)
   [\s\S]*     # all characters including newlines (space+not space)
               # zero or more times
   12
)              # close the lookahead

Другими словами, шаблон означает: 12, за которым не следует еще 12 до конца строки.

Ответ 3

Используйте этот String.replace и убедитесь, что у вас есть конец ввода $ в конце:

repl = "12_13_12".replace(/12(?!.*?12)/, 'aa');

EDIT: Чтобы использовать переменную в Regex:

var re = new RegExp(ToBeReplaced);
repl = str.replace(re, 'aa');