2015-03-21 8 views
0

Как заменить последнее вхождение переменной (foo) в строку с помощью «foo»?Как заменить последнее заполнение переменной в строке

Я пробовал:

var re = new RegExp(".*" + (foo))); 
    var newText = currentText.replace(re, someThingElse); 
+0

вопрос уже здесь ответил: http://stackoverflow.com/questions/23136691/replace-last-occurrence-word-in- javascript –

+0

@AliSheikhpour eh .. not really – SuperUberDuper

ответ

1

ли отрицательный предпросмотр, чтобы сделать матч потерпеть неудачу, если есть какое-либо событие иглы

function replaceLast(haystack, needle, replacement) { 
    // you may want to escape needle for the RegExp 
    var re = new RegExp(needle + '(?![\\s\\S]*?' + needle + ')'); 
    return haystack.replace(re, replacement); 
} 

replaceLast('foobarfoo', 'foo', 'baz'); // "foobarbaz" 
replaceLast('foobarfoo \n foobarfoo', 'foo', 'baz'); // "foobarfoo \n foobarbaz" 
replaceLast('foo ', 'foo', 'baz'); // "baz " 

Преимущество этого метода заключается в том, что замена точно что вы ожидаете, то есть вы можете использовать $1, $2 и т. д., как обычно, и аналогично, если вы перейдете в функцию , параметры будут такими, какие вы ожидаете тоже

replaceLast('bar foobar baz', '(b)(a)(r)', '$3$2$1'); // "bar foorab baz" 
2

Отрицательная-предпросмотр будет работать, но так будет

newText = newText.replace(new RegExp("(.*)" + foo), "$1somethingElse"); 
+0

Использование жадного '' 'будет лучше, чем отрицательный lookahead, если вам не нужно использовать часть соответствия в замене. Кроме того, '. *' Не будет соответствовать новым строкам –

+0

Будет ли это также добавлять текст после foo в мою исходную строку? – SuperUberDuper

+1

@SuperUberDuper в этом случае это текст _before_, который заменяется обратно в –

Смежные вопросы