2566 Stimmen

Wie kann ich das letzte Zeichen in einer Zeichenkette mit Javascript abschneiden/ausschneiden/abschneiden?

Ich habe eine Schnur, 12345.00 und ich möchte, dass sie zurückkehrt. 12345.0 .

Ich habe mir angesehen trim aber es sieht so aus, als würde es nur Leerzeichen und slice Ich wüsste nicht, wie das funktionieren sollte. Irgendwelche Vorschläge?

10 Stimmen

Wissen Sie, wie das Suffix lautet, oder wollen Sie das letzte Wort anhand der Unterstriche trennen und entfernen?

42 Stimmen

Ist Ihnen das Runden wichtig? 12345,46 = 12345,5 oder 12345,4?

45voto

Sebastian Simon Punkte 16428

Beachten Sie, dass String.prototype.{ split, slice, substr, substring } mit UTF-16 kodierten Zeichenketten arbeiten

Keine der bisherigen Antworten ist Unicode-fähig. Strings werden in den meisten modernen JavaScript-Engines als UTF-16 kodiert, aber höhere Unicode-Codepunkte erfordern Surrogatpaare Daher arbeiten ältere, bereits existierende String-Methoden mit UTF-16-Codeeinheiten, nicht mit Unicode-Codepunkten. Siehe: NICHT verwenden .split('') .

const string = "";

console.log(string.slice(0, -1)); // "\ud83e"
console.log(string.substr(0, string.length - 1)); // "\ud83e"
console.log(string.substring(0, string.length - 1)); // "\ud83e"
console.log(string.replace(/.$/, "")); // "\ud83e"
console.log(string.match(/(.*).$/)[1]); // "\ud83e"

const utf16Chars = string.split("");

utf16Chars.pop();
console.log(utf16Chars.join("")); // "\ud83e"

Darüber hinaus, RegExp Methoden, wie in älteren Antworten vorgeschlagen, nicht mit den Zeilenumbrüchen am Ende übereinstimmen:

const string = "Hello, world!\n";

console.log(string.replace(/.$/, "").endsWith("\n")); // true
console.log(string.match(/(.*).$/) === null); // true

Verwenden Sie den String-Iterator, um Zeichen zu iterieren

Unicode-fähiger Code verwendet den Iterator der Zeichenkette; siehe Array.from y ... Verbreitung . string[Symbol.iterator] verwendet werden (z. B. anstelle von string ) sowie.

Siehe auch Aufteilung von Unicode-Strings in Zeichen in JavaScript .

Beispiele:

const string = "";

console.log(Array.from(string).slice(0, -1).join("")); // ""
console.log([
  ...string
].slice(0, -1).join("")); // ""

Verwenden Sie die s y u Flaggen auf einem RegExp

El dotAll o s Flagge macht . mit Zeilenumbruchzeichen übereinstimmen, die unicode o u Flagge aktiviert bestimmte Unicode-bezogene Funktionen. Beachten Sie, dass bei Verwendung der Option u eliminieren Sie unnötige Identitäts-Escapes, da diese sind ungültig in einem u regex z.B. \[ ist in Ordnung, da es eine Zeichenklasse ohne den Backslash beginnen würde, aber \: ist es nicht, denn es ist ein : mit oder ohne Backslash, daher müssen Sie den Backslash entfernen.

Beispiele:

const unicodeString = "",
  lineBreakString = "Hello, world!\n";

console.log(lineBreakString.replace(/.$/s, "").endsWith("\n")); // false
console.log(lineBreakString.match(/(.*).$/s) === null); // false
console.log(unicodeString.replace(/.$/su, "")); // 
console.log(unicodeString.match(/(.*).$/su)[1]); // 

// Now `split` can be made Unicode-aware:

const unicodeCharacterArray = unicodeString.split(/(?:)/su),
  lineBreakCharacterArray = lineBreakString.split(/(?:)/su);

unicodeCharacterArray.pop();
lineBreakCharacterArray.pop();
console.log(unicodeCharacterArray.join("")); // ""
console.log(lineBreakCharacterArray.join("").endsWith("\n")); // false

Beachten Sie, dass manche Grapheme aus mehr als einem Codepunkt bestehen, z. B. die aus der Sequenz (U+1F3F3), VS16 (U+FE0F) , ZWJ (U+200D) , (U+1F308). Hier, sogar Array.from wird dies in vier "Zeichen" aufgeteilt. Deren Zuordnung wird durch die Option RegExp-Satznotation und Eigenschaften von Zeichenketten Vorschlag .

1 Stimmen

Danke für Ihre Erklärung. Sie erweitert in der Tat den Horizont.

33voto

Akshay Joshi Punkte 475

Verwendung der Slice-Funktion von JavaScript:

let string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
console.log(string);

Dies könnte verwendet werden, um '_bar' am Ende einer Zeichenkette beliebiger Länge zu entfernen.

26voto

w35l3y Punkte 7996

Ein regulärer Ausdruck ist das, wonach Sie suchen:

let str = "foo_bar";
console.log(str.replace(/_bar$/, ""));

1 Stimmen

Dies löst ein damit zusammenhängendes Problem des bedingten Entfernens, anstatt blindlings abzuschneiden

16voto

Somwang Souksavatd Punkte 4422

Versuchen Sie dies:

const myString = "Hello World!";
console.log(myString.slice(0, -1));

16voto

profile_-1 Punkte 75

https://stackoverflow.com/questions/34817546/javascript-how-to-delete-last-two-characters-in-a-string

Verwenden Sie einfach Trim, wenn Sie keine Leerzeichen wünschen.

"11.01 °C".slice(0,-2).trim()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X