Как заменить последнее вхождение переменной (foo) в строку с помощью «foo»?Как заменить последнее заполнение переменной в строке
Я пробовал:
var re = new RegExp(".*" + (foo)));
var newText = currentText.replace(re, someThingElse);
Как заменить последнее вхождение переменной (foo) в строку с помощью «foo»?Как заменить последнее заполнение переменной в строке
Я пробовал:
var re = new RegExp(".*" + (foo)));
var newText = currentText.replace(re, someThingElse);
ли отрицательный предпросмотр, чтобы сделать матч потерпеть неудачу, если есть какое-либо событие иглы
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"
Отрицательная-предпросмотр будет работать, но так будет
newText = newText.replace(new RegExp("(.*)" + foo), "$1somethingElse");
Использование жадного '' 'будет лучше, чем отрицательный lookahead, если вам не нужно использовать часть соответствия в замене. Кроме того, '. *' Не будет соответствовать новым строкам –
Будет ли это также добавлять текст после foo в мою исходную строку? – SuperUberDuper
@SuperUberDuper в этом случае это текст _before_, который заменяется обратно в –
вопрос уже здесь ответил: http://stackoverflow.com/questions/23136691/replace-last-occurrence-word-in- javascript –
@AliSheikhpour eh .. not really – SuperUberDuper