JavaScript: заменить последнее вхождение текста в строку - PullRequest
68 голосов
/ 28 апреля 2010

См. Мой фрагмент кода ниже:

var list = ['one', 'two', 'three', 'four'];
var str = 'one two, one three, one four, one';
for ( var i = 0; i < list.length; i++)
{
     if (str.endsWith(list[i])
     {
         str = str.replace(list[i], 'finish')
     }
 }

Я хочу заменить последнее вхождение слова 1 словом «конец» в строке, что у меня не будет работать, потому что метод замены будет только заменятьпервое возникновение этого.Кто-нибудь знает, как я могу изменить этот фрагмент так, чтобы он заменял только последний экземпляр 'one'

Ответы [ 13 ]

1 голос
/ 05 января 2014

Старый старомодный и большой код, но максимально эффективный:

function replaceLast(origin,text){
    textLenght = text.length;
    originLen = origin.length
    if(textLenght == 0)
        return origin;

    start = originLen-textLenght;
    if(start < 0){
        return origin;
    }
    if(start == 0){
        return "";
    }
    for(i = start; i >= 0; i--){
        k = 0;
        while(origin[i+k] == text[k]){
            k++
            if(k == textLenght)
                break;
        }
        if(k == textLenght)
            break;
    }
    //not founded
    if(k != textLenght)
        return origin;

    //founded and i starts on correct and i+k is the first char after
    end = origin.substring(i+k,originLen);
    if(i == 0)
        return end;
    else{
        start = origin.substring(0,i) 
        return (start + end);
    }
}
0 голосов
/ 19 марта 2018

Я бы предложил использовать пакет replace-last npm.

var str = 'one two, one three, one four, one';
var result = replaceLast(str, 'one', 'finish');
console.log(result);
<script src="https://unpkg.com/replace-last@latest/replaceLast.js"></script>

Это работает для замены строк и регулярных выражений.

0 голосов
/ 13 февраля 2015
str = (str + '?').replace(list[i] + '?', 'finish');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...