Как динамически с помощью переменных и регулярного выражения поменять последнее значение в строке?

195
28 апреля 2018, 18:04

Нужно динамически с помощью переменных и регулярного выражения поменять последнее значение в строке.
В первом случае работает во втором нет.
За ответ спасибо заранее.

var str01 = "200_String_200_String"; 
var str02 = "200_String_200_String_20_String"; 
var mx = '200'; 
var dx = '400'; 
var str1 = str01.replace(new RegExp('200([^200]*)$', ''), dx + '$1'); 
var str2 = str02.replace(new RegExp('' + mx + '([^' + mx + ']*)$', ''), dx + '$1'); 
 
document.getElementById('ok1').innerHTML = str1; 
document.getElementById('ok2').innerHTML = str2;
<div id="ok1"></div> 
<div id="ok2"></div>

Answer 1

Одним из возможных решений является "жадный" "умеренный" квантификатор (англ. "tempered greedy token") (?:(?!<переменная>).)*:

var str01 = "200_String_200_String"; 
var str02 = "200_String_200_String_20_String"; 
var mx = '200'; 
var dx = '400'; 
var str1 = str01.replace(new RegExp('200((?:(?!200).)*)$', ''), dx + '$1'); 
var str2 = str02.replace(new RegExp('' + mx + '((?:(?!' + mx.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + ').)*)$', ''), dx + '$1'); 
 
document.getElementById('ok1').innerHTML = str1; 
document.getElementById('ok2').innerHTML = str2;
<div id="ok1"></div> 
<div id="ok2"></div>

На всякий случай, я добавил .replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), если в переменной mx окажутся символы, являющиеся специальными метасимволами регулярных выражений, которые находят сами себя только если они экранированы.

См. демо регулярного выражения.

Если в строке могут быть знаки перевода на новую строку, замените (?:(?!<переменная>).)* на (?:(?!<переменная>)[^])*.

READ ALSO
Как отображать и изменять файлы на сайте

Как отображать и изменять файлы на сайте

Нужно чтобы в saidbar'е отображать файлы HTML,CSS,JS,PHP, а в контенте содержимое этого файлаКак это сделать?

153
Как проверить переменную на вхождение в массив

Как проверить переменную на вхождение в массив

Есть массив, который приходит с сервера:

187