Voir mon extrait de code ci-dessous:
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')
}
}
Je veux remplacer la dernière occurrence du mot un par le mot finish dans la chaîne, ce que j'ai ne fonctionnera pas car la méthode replace ne remplacera que la première occurrence de celui-ci. Quelqu'un sait-il comment je peux modifier cet extrait de code afin qu'il ne remplace que la dernière instance de "un"
javascript
string
replace
Ruth
la source
la source
new RegExp(string)
) et la syntaxe en ligne (/something/
). Vous n'avez pas besoin des caractères "/" lorsque vous utilisez le constructeur RegExp.` - things like
+,
*,
? `, Des parenthèses, des crochets, peut-être d'autres choses.Vous pouvez utiliser
String#lastIndexOf
pour rechercher la dernière occurrence du mot, puis uneString#substring
concaténation pour créer la chaîne de remplacement.... ou dans ce sens.
la source
Je sais que c'est idiot, mais je me sens créatif ce matin:
Donc vraiment, tout ce que vous avez à faire est d'ajouter cette fonction au prototype String:
Puis lancez-le comme ceci:
str = str.replaceLast('one', 'finish');
Une limitation que vous devez savoir est que, puisque la fonction est divisée par espace, vous ne pouvez probablement rien trouver / remplacer par un espace.En fait, maintenant que j'y pense, vous pouvez contourner le problème de «l'espace» en divisant avec un jeton vide.
la source
Pas aussi élégant que les réponses regex ci-dessus, mais plus facile à suivre pour les moins avertis parmi nous:
Je me rends compte que c'est probablement plus lent et plus coûteux que les exemples de regex, mais je pense que cela pourrait être utile pour illustrer comment les manipulations de chaînes peuvent être effectuées. (Cela peut aussi être un peu condensé, mais encore une fois, je voulais que chaque étape soit claire.)
la source
Voici une méthode qui utilise uniquement le fractionnement et la jointure. C'est un peu plus lisible, alors j'ai pensé que cela valait la peine d'être partagé:
la source
what
du tout. par exemple'foo'.replaceLast('bar'); // 'barfoo'
Je pensais que je répondrais ici car cela est apparu en premier dans ma recherche Google et il n'y a pas de réponse (en dehors de la réponse créative de Matt :)) qui remplace de manière générique la dernière occurrence d'une chaîne de caractères lorsque le texte à remplacer n'est peut-être pas à la fin de la chaîne.
la source
Une réponse simple sans aucune regex serait:
la source
Ne pourriez-vous pas simplement inverser la chaîne et remplacer uniquement la première occurrence du modèle de recherche inversé? Je pense . . .
la source
Si la vitesse est importante, utilisez ceci:
C'est plus rapide que d'utiliser RegExp.
la source
Ancien et gros code mais aussi efficace que possible:
la source
Une solution simple serait d'utiliser la méthode des sous-chaînes. Puisque la chaîne se termine par un élément de liste, nous pouvons utiliser string.length et calculer l'index de fin pour la sous-chaîne sans utiliser la
lastIndexOf
méthodestr = str.substring(0, str.length - list[i].length) + "finish"
la source
Je n'ai aimé aucune des réponses ci-dessus et j'ai trouvé les réponses ci-dessous
Usage:
J'espère que cela pourra aider!
la source
Je suggérerais d'utiliser le package replace-last npm.
Cela fonctionne pour les remplacements de chaînes et de regex.
la source
la source