Gibt es in Javascript eine einfache Möglichkeit, das letzte Vorkommen eines ‘_’ (Unterstrich) in einer bestimmten Zeichenfolge zu ersetzen?
Ersetzt das letzte Vorkommen des Zeichens in der Zeichenfolge
CLiown
Martin Jespersen
Sie brauchen kein jQuery, nur einen regulären Ausdruck.
Dadurch wird der letzte Unterstrich entfernt:
var str="a_b_c";
console.log( str.replace(/_([^_]*)$/, '$1') ) //a_bc
Dadurch wird es durch den Inhalt der Variablen ersetzt replacement
:
var str="a_b_c",
replacement="!";
console.log( str.replace(/_([^_]*)$/, replacement + '$1') ) //a_b!c
-
@Martin Jespersen: Was ist, wenn der zu ersetzende Text nicht der Unterstrich ist, sondern der Inhalt einer Variablen namens replaceMe? Wie soll die Regex geändert werden?
– Pierpaolo
18. Dezember 2012 um 10:07 Uhr
-
@Pierpaolo: Sie müssten den regulären Ausdruck mit a erstellen
new RegExp
lesen Sie hier alles darüber: developer.mozilla.org/en-US/docs/JavaScript/Guide/… – Denken Sie daran, dem zu entkommenreplaceMe
-Variable, sodass sie keine Sonderzeichen enthält, die den regulären Ausdruck verändern– Martin Jespersen
18. Dezember 2012 um 18:38 Uhr
-
@Martin Jespersen: Danke für den Link. Ich wusste schon von der
new RegExp
Syntax. Meine Frage war eher “wo soll ich die Variable replaceMe ablegen”? z.B:var aRegExpr = new RegExp("_([^"+replaceMe+"]*)$");
– Pierpaolo
19. Dezember 2012 um 8:33 Uhr
-
@Pierpaolo: Es ist nicht so einfach, da Sie ein Wort und nicht nur ein einzelnes Zeichen in einer Variablen haben können – Sie sollten eine neue Frage dazu stellen 🙂 Es ist zu kompliziert für einen Kommentar hier
– Martin Jespersen
19. Dezember 2012 um 22:57 Uhr
-
Vielen Dank. Ich verstehe, ich werde suchen, ob es schon einen gibt.
– Pierpaolo
20. Dezember 2012 um 8:24 Uhr
mplungjan
Weder jQuery noch Regex sind erforderlich, vorausgesetzt, das Zeichen, das Sie ersetzen möchten, ist in der Zeichenfolge vorhanden
Ersetzt das letzte Zeichen in einer Zeichenfolge
str = str.substring(0,str.length-2)+otherchar
Ersetzt den letzten Unterstrich in einer Zeichenfolge
var pos = str.lastIndexOf('_');
str = str.substring(0,pos) + otherchar + str.substring(pos+1)
oder verwenden Sie einen der regulären Ausdrücke aus den anderen Antworten
var str1 = "Replace the full stop with a questionmark."
var str2 = "Replace last _ with another char other than the underscore _ near the end"
// Replace last char in a string
console.log(
str1.substring(0,str1.length-2)+"?"
)
// alternative syntax
console.log(
str1.slice(0,-1)+"?"
)
// Replace last underscore in a string
var pos = str2.lastIndexOf('_'), otherchar = "|";
console.log(
str2.substring(0,pos) + otherchar + str2.substring(pos+1)
)
// alternative syntax
console.log(
str2.slice(0,pos) + otherchar + str2.slice(pos+1)
)
-
+1 für “keine Notwendigkeit für jQuery”. Es ist wichtig zu wissen, dass JQuery nicht die Antwort auf alles ist. Javascript ist eine perfekt fähige Programmiersprache, ohne alles durch jquery schieben zu müssen.
– Spudley
31. März 2011 um 8:57 Uhr
-
@Spudley Also wahr. Hier bei SO ist jedoch keine JS-Antwort vollständig ohne eine jQuery-Version ;))
– mplungjan
31. März 2011 um 8:58 Uhr
-
+1
zum kein regulärer Ausdruck &lastIndexOf(...)
führt die Suche vom ENDE aus (bessere Leistung) also die derzeit akzeptierte Regexp sogar kippen sei schneller.– jave.web
23. September 2016 um 13:22 Uhr
-
“nor regex”…. diese Lösung funktioniert nicht, wenn string keinen Unterstrich enthält. Regex-Version tut. Sie können das Ersatzzeichen nicht hinzufügen, wenn es nicht benötigt wird.
– Teddybus
10. Juni 2019 um 13:32 Uhr
-
@tedebus bitte lies die Frage. Einige der Beispiele können auch jedes letzte Zeichen verarbeiten
– mplungjan
10. Juni 2019 um 13:34 Uhr
Was ist damit?
function replaceLast(x, y, z){
var a = x.split("");
a[x.lastIndexOf(y)] = z;
return a.join("");
}
replaceLast("Hello world!", "l", "x"); // Hello worxd!
Eine andere super klare Möglichkeit, dies zu tun, könnte wie folgt aussehen:
let modifiedString = originalString .split('').reverse().join('') .replace('_', '') .split('').reverse().join('')
Halte es einfach
var someString = "a_b_c";
var newCharacter = "+";
var newString = someString.substring(0, someString.lastIndexOf('_')) + newCharacter + someString.substring(someString.lastIndexOf('_')+1);
var someString = "(/n{})+++(/n{})---(/n{})$$$";
var toRemove = "(/n{})"; // should find & remove last occurrence
function removeLast(s, r){
s = s.split(r)
return s.slice(0,-1).join(r) + s.pop()
}
console.log(
removeLast(someString, toRemove)
)
Abbauen:
s = s.split(toRemove) // ["", "+++", "---", "$$$"]
s.slice(0,-1) // ["", "+++", "---"]
s.slice(0,-1).join(toRemove) // "})()+++})()---"
s.pop() // "$$$"
Gemeinschaft
Kehren Sie die Zeichenfolge um, ersetzen Sie das Zeichen, kehren Sie die Zeichenfolge um.
Hier ist ein Beitrag zum Umkehren einer Zeichenfolge in Javascript: Wie kehrt man eine Zeichenfolge in JavaScript um?
Ist es immer das letzte Zeichen der Zeichenfolge? Wenn nicht, schau dir string.lastIndexOf(searchstring, start) an
– Skarmaten
31. März 2011 um 8:56 Uhr
Sie brauchen kein jQuery.
– zzzzBov
19. Februar 2013 um 22:41 Uhr
mögliches Duplikat von So ersetzen Sie das letzte Vorkommen von Zeichen in einer Zeichenfolge mit Javascript
– Anderson Green
4. September 2014 um 5:41 Uhr