как заменить последнее вхождение слова в javascript? - PullRequest
9 голосов
/ 09 мая 2009

например:

var str="<br>hi<br>hi";

для замены последнего (второго) <br>,

для изменения на "<br>hihi"

Я попробовал:

str.replace(/<br>(.*?)$/,\1);

но это неправильно. Какая версия правильная?

Ответы [ 3 ]

13 голосов
/ 09 мая 2009

Вы можете использовать тот факт, что квантификаторы являются жадными:

str.replace(/(.*)<br>/, "$1");

Но недостатком является то, что это приведет к возврату.

Другим решением было бы разделить строку, соединить последние два элемента и затем соединить части:

var parts = str.split("<br>");
if (parts.length > 1) {
    parts[parts.length - 2] += parts.pop();
}
str = parts.join("<br>");
3 голосов
/ 09 мая 2009

Я думаю, вы хотите это:

str.replace(/^(.*)<br>(.*?)$/, '$1$2')

Это жадно сопоставляет все от начала до <br>, затем <br>, а затем неуклюже сопоставляет все до конца.

0 голосов
/ 14 сентября 2015
String.prototype.replaceLast = function(what, replacement) { 
    return this.replace(new RegExp('^(.*)' + what + '(.*?)$'), '$1' + replacement + '$2');
}

str = str.replaceLast(what, replacement);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...