Siehe mein Code-Snippet unten:
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')
}
}
Ich möchte das letzte Vorkommen des Wortes eins durch das Ende des Wortes in der Zeichenfolge ersetzen. Was ich habe, funktioniert nicht, da die Ersetzungsmethode nur das erste Vorkommen des Wortes ersetzt. Weiß jemand, wie ich dieses Snippet so ändern kann, dass es nur die letzte Instanz von 'one' ersetzt?
javascript
string
replace
Ruth
quelle
quelle
new RegExp(string)
) und die Inline-Syntax (/something/
). Sie benötigen die Zeichen "/" nicht, wenn Sie den RegExp-Konstruktor verwenden.` - things like
+,
*,
? `, Klammern, eckigen Klammern und möglicherweise anderen Dingen zu" schützen " .Sie können verwenden
String#lastIndexOf
, um das letzte Vorkommen des Wortes zu finden, und dannString#substring
und die Verkettung, um die Ersatzzeichenfolge zu erstellen.... oder in diese Richtung.
quelle
Ich weiß, dass das albern ist, aber ich fühle mich heute Morgen kreativ:
Alles, was Sie tun müssen, ist, diese Funktion zum String-Prototyp hinzuzufügen:
Dann führen Sie es so aus:
str = str.replaceLast('one', 'finish');
Eine Einschränkung, die Sie kennen sollten, ist, dass Sie wahrscheinlich nichts durch ein Leerzeichen finden / ersetzen können , da die Funktion nach Leerzeichen aufgeteilt wird .Jetzt, wo ich darüber nachdenke, könnten Sie das Platzproblem umgehen, indem Sie es mit einem leeren Token aufteilen.
quelle
Nicht so elegant wie die Regex-Antworten oben, aber für die nicht so versierten unter uns leichter zu befolgen:
Mir ist klar, dass dies wahrscheinlich langsamer und verschwenderischer ist als die Regex-Beispiele, aber ich denke, es könnte hilfreich sein, um zu veranschaulichen, wie String-Manipulationen durchgeführt werden können. (Es kann auch etwas verdichtet werden, aber ich wollte, dass jeder Schritt klar ist.)
quelle
Hier ist eine Methode, die nur das Teilen und Verbinden verwendet. Es ist etwas lesbarer und dachte, es lohnt sich zu teilen:
quelle
what
. zB'foo'.replaceLast('bar'); // 'barfoo'
Ich dachte, ich würde hier antworten, da dies zuerst in meiner Google-Suche auftauchte und es keine Antwort (außerhalb von Matts kreativer Antwort :) gibt, die generisch das letzte Auftreten einer Zeichenfolge ersetzt, wenn der zu ersetzende Text möglicherweise nicht am Ende steht der Zeichenfolge.
quelle
Eine einfache Antwort ohne Regex wäre:
quelle
Könnten Sie nicht einfach die Zeichenfolge umkehren und nur das erste Auftreten des umgekehrten Suchmusters ersetzen? Ich denke . . .
quelle
Wenn Geschwindigkeit wichtig ist, verwenden Sie Folgendes:
Es ist schneller als RegExp.
quelle
Altmodischer und großer Code, aber so effizient wie möglich:
quelle
Eine einfache Lösung wäre die Verwendung der Teilzeichenfolge. Da der String mit dem Listenelement endet, können wir string.length verwenden und den Endindex für den Teilstring ohne Verwendung der
lastIndexOf
Methode berechnenstr = str.substring(0, str.length - list[i].length) + "finish"
quelle
Ich mochte keine der obigen Antworten und fand die folgenden
Verwendung:
Hoffentlich hilft das!
quelle
Ich würde vorschlagen, das Paket replace-last npm zu verwenden.
Dies funktioniert für das Ersetzen von Zeichenfolgen und Regex.
quelle
quelle