Veja meu snippet de código abaixo:
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')
}
}
Desejo substituir a última ocorrência da palavra um pela palavra terminar na string, o que eu tenho não funcionará porque o método replace apenas substituirá a primeira ocorrência dela. Alguém sabe como posso alterar esse trecho para que substitua apenas a última instância de 'um'
javascript
string
replace
Ruth
fonte
fonte
new RegExp(string)
) e a sintaxe embutida (/something/
). Você não precisa dos caracteres "/" ao usar o construtor RegExp.` - things like
+,
*,
? `, Parênteses, colchetes, talvez outras coisas.Você pode usar
String#lastIndexOf
para localizar a última ocorrência da palavra e, em seguida, umaString#substring
concatenação para construir a string de substituição.... ou nesse sentido.
fonte
Eu sei que isso é bobo, mas estou me sentindo criativo esta manhã:
Então, realmente, tudo o que você precisa fazer é adicionar esta função ao protótipo String:
Em seguida, execute-o assim:
str = str.replaceLast('one', 'finish');
Uma limitação que você deve saber é que, como a função é dividida por espaço, provavelmente você não conseguirá encontrar / substituir nada por um espaço.Na verdade, agora que penso nisso, você poderia contornar o problema de 'espaço' dividindo com um token vazio.
fonte
Não tão elegante quanto as respostas de regex acima, mas mais fácil de seguir para os não tão experientes entre nós:
Sei que isso é provavelmente mais lento e desperdiçador do que os exemplos de regex, mas acho que pode ser útil como uma ilustração de como as manipulações de strings podem ser feitas. (Também pode ser um pouco condensado, mas, novamente, eu queria que cada etapa fosse clara.)
fonte
Aqui está um método que usa apenas divisão e união. É um pouco mais legível, então pensei que valia a pena compartilhar:
fonte
what
nada. por exemplo'foo'.replaceLast('bar'); // 'barfoo'
Pensei em responder aqui, já que isso apareceu primeiro na minha pesquisa do Google e não há uma resposta (fora da resposta criativa de Matt :)) que substitui genericamente a última ocorrência de uma sequência de caracteres quando o texto a ser substituído pode não estar no final da corda.
fonte
Uma resposta simples sem qualquer regex seria:
fonte
Você não poderia simplesmente inverter a string e substituir apenas a primeira ocorrência do padrão de pesquisa invertido? Estou pensando . . .
fonte
Se a velocidade for importante, use isto:
É mais rápido do que usar RegExp.
fonte
Código antigo e grande, mas o mais eficiente possível:
fonte
Uma solução simples seria usar o método substring. Como a string termina com o elemento da lista, podemos usar string.length e calcular o índice final da substring sem usar o
lastIndexOf
métodostr = str.substring(0, str.length - list[i].length) + "finish"
fonte
Eu não gostei de nenhuma das respostas acima e encontrei a seguinte
Uso:
Espero que ajude!
fonte
Eu sugeriria usar o pacote replace-last npm.
Isso funciona para substituições de string e regex.
fonte
fonte