+String.prototype: Suchen und AbgleichenString.prototype: ExtrahierenString.prototype: KombinierenString.prototype: TransformierenStrings sind primitive Werte in JavaScript und unveränderlich. Das bedeutet, dass stringbezogene Operationen immer neue Strings erzeugen und niemals bestehende Strings ändern.
Literale für Strings
const str1 = 'Don\'t say "goodbye"'; // string literal
const str2 = "Don't say \"goodbye\""; // string literals
assert.equal(
`As easy as ${123}!`, // template literal
'As easy as 123!',
);Backslashes werden verwendet, um
\\ repräsentiert einen Backslash\n repräsentiert einen Zeilenumbruch\r repräsentiert einen Wagenrücklauf\t repräsentiert einen TabulatorInnerhalb eines String.raw-getaggten Templates (Zeile A) werden Backslashes als normale Zeichen behandelt.
assert.equal(
String.raw`\ \n\t`, // (A)
'\\ \\n\\t',
);Umwandlung von Werten in Strings
> String(undefined)
'undefined'
> String(null)
'null'
> String(123.45)
'123.45'
> String(true)
'true'Kopieren von Teilen eines Strings
// There is no type for characters;
// reading characters produces strings:
const str3 = 'abc';
assert.equal(
str3[2], 'c' // no negative indices allowed
);
assert.equal(
str3.at(-1), 'c' // negative indices allowed
);
// Copying more than one character:
assert.equal(
'abc'.slice(0, 2), 'ab'
);Verketten von Strings
assert.equal(
'I bought ' + 3 + ' apples',
'I bought 3 apples',
);
let str = '';
str += 'I bought ';
str += 3;
str += ' apples';
assert.equal(
str, 'I bought 3 apples',
);JavaScript-Zeichen sind 16 Bit groß. Sie sind es, was in Strings indiziert wird und was .length zählt.
Code Points sind die atomaren Teile von Unicode-Text. Die meisten von ihnen passen in ein JavaScript-Zeichen, einige belegen zwei (insbesondere Emojis).
assert.equal(
'A'.length, 1
);
assert.equal(
'🙂'.length, 2
);Grapheme Cluster (vom Benutzer wahrgenommene Zeichen) repräsentieren geschriebene Symbole. Jeder besteht aus einem oder mehreren Code Points.
Aufgrund dieser Tatsachen sollten wir Text nicht in JavaScript-Zeichen aufteilen, sondern in Grapheme. Weitere Informationen zur Textverarbeitung finden Sie in §20.7 „Atome des Textes: Code Points, JavaScript-Zeichen, Grapheme Cluster“.
Dieser Unterabschnitt gibt einen kurzen Überblick über die String-API. Am Ende dieses Kapitels finden Sie eine umfassendere Schnellreferenz.
Unterstrings finden
> 'abca'.includes('a')
true
> 'abca'.startsWith('ab')
true
> 'abca'.endsWith('ca')
true
> 'abca'.indexOf('a')
0
> 'abca'.lastIndexOf('a')
3Aufteilen und Zusammenfügen
assert.deepEqual(
'a, b,c'.split(/, ?/),
['a', 'b', 'c']
);
assert.equal(
['a', 'b', 'c'].join(', '),
'a, b, c'
);Auffüllen und Abschneiden
> '7'.padStart(3, '0')
'007'
> 'yes'.padEnd(6, '!')
'yes!!!'
> '\t abc\n '.trim()
'abc'
> '\t abc\n '.trimStart()
'abc\n '
> '\t abc\n '.trimEnd()
'\t abc'Wiederholen und Groß-/Kleinschreibung ändern
> '*'.repeat(5)
'*****'
> '= b2b ='.toUpperCase()
'= B2B ='
> 'ΑΒΓ'.toLowerCase()
'αβγ'Einfache String-Literale werden entweder von einfachen oder doppelten Anführungszeichen umschlossen.
const str1 = 'abc';
const str2 = "abc";
assert.equal(str1, str2);Einfache Anführungszeichen werden häufiger verwendet, da sie die Erwähnung von HTML erleichtern, wo doppelte Anführungszeichen bevorzugt werden.
Das nächste Kapitel behandelt Template-Literale, die uns Folgendes bieten:
Der Backslash ermöglicht es uns, Sonderzeichen zu erzeugen
'\n''\r\n''\t''\\'Der Backslash ermöglicht es uns auch, den Begrenzer eines String-Literals innerhalb dieses Literals zu verwenden.
assert.equal(
'She said: "Let\'s go!"',
"She said: \"Let's go!\"");JavaScript hat keinen separaten Datentyp für Zeichen – Zeichen werden immer als Strings dargestellt.
const str = 'abc';
// Reading a JavaScript character at a given index
assert.equal(str[1], 'b');
// Counting the JavaScript characters in a string:
assert.equal(str.length, 3);Die Zeichen, die wir auf dem Bildschirm sehen, werden Grapheme Cluster genannt. Die meisten von ihnen werden durch einzelne JavaScript-Zeichen dargestellt. Es gibt jedoch auch Grapheme Cluster (insbesondere Emojis), die durch mehrere JavaScript-Zeichen dargestellt werden.
> '🙂'.length
2Wie das funktioniert, wird in §20.7 „Atome des Textes: Code Points, JavaScript-Zeichen, Grapheme Cluster“ erklärt.
+Wenn mindestens ein Operand ein String ist, konvertiert der Plus-Operator (+) alle Nicht-Strings in Strings und verkettet das Ergebnis.
assert.equal(3 + ' times ' + 4, '3 times 4');Der Zuweisungsoperator += ist nützlich, wenn wir einen String Stück für Stück zusammensetzen möchten.
let str = ''; // must be `let`!
str += 'Say it';
str += ' one more';
str += ' time';
assert.equal(str, 'Say it one more time'); Verkettung über
+ ist effizient
Die Verwendung von + zum Zusammensetzen von Strings ist recht effizient, da die meisten JavaScript-Engines dies intern optimieren.
Übung: Strings verketten
exercises/strings/concat_string_array_test.mjs
Dies sind drei Möglichkeiten, einen Wert x in einen String umzuwandeln:
String(x)''+xx.toString() (funktioniert nicht für undefined und null)Empfehlung: Verwenden Sie das beschreibende und sichere String().
Beispiele
assert.equal(String(undefined), 'undefined');
assert.equal(String(null), 'null');
assert.equal(String(false), 'false');
assert.equal(String(true), 'true');
assert.equal(String(123.45), '123.45');Fallstrick für Booleans: Wenn wir einen Boolean über String() in einen String konvertieren, können wir ihn im Allgemeinen nicht über Boolean() zurückkonvertieren.
> String(false)
'false'
> Boolean('false')
trueDer einzige String, für den Boolean() false zurückgibt, ist der leere String.
Einfache Objekte haben eine Standard-String-Darstellung, die nicht sehr nützlich ist.
> String({a: 1})
'[object Object]'Arrays haben eine bessere String-Darstellung, aber sie verbergen immer noch viele Informationen.
> String(['a', 'b'])
'a,b'
> String(['a', ['b']])
'a,b'
> String([1, 2])
'1,2'
> String(['1', '2'])
'1,2'
> String([true])
'true'
> String(['true'])
'true'
> String(true)
'true'Die Stringifizierung von Funktionen gibt ihren Quellcode zurück.
> String(function f() {return 4})
'function f() {return 4}'Wir können die eingebaute Methode zur Stringifizierung von Objekten überschreiben, indem wir die Methode toString() implementieren.
const obj = {
toString() {
return 'hello';
}
};
assert.equal(String(obj), 'hello');Das JSON-Datenformat ist eine Textdarstellung von JavaScript-Werten. Daher kann JSON.stringify() auch verwendet werden, um Werte in Strings umzuwandeln.
> JSON.stringify({a: 1})
'{"a":1}'
> JSON.stringify(['a', ['b']])
'["a",["b"]]'Der Nachteil ist, dass JSON nur null, Booleans, Zahlen, Strings, Arrays und Objekte unterstützt (die es immer so behandelt, als wären sie durch Objekt-Literale erstellt worden).
Tipp: Der dritte Parameter ermöglicht es uns, die mehrzeilige Ausgabe zu aktivieren und anzugeben, wie viel eingerückt werden soll – zum Beispiel.
console.log(JSON.stringify({first: 'Jane', last: 'Doe'}, null, 2));Diese Anweisung erzeugt die folgende Ausgabe:
{
"first": "Jane",
"last": "Doe"
}
Strings können mit den folgenden Operatoren verglichen werden:
< <= > >=
Es gibt einen wichtigen Vorbehalt zu beachten: Diese Operatoren vergleichen basierend auf den numerischen Werten von JavaScript-Zeichen. Das bedeutet, dass die Reihenfolge, die JavaScript für Strings verwendet, anders ist als die, die in Wörterbüchern und Telefonbüchern verwendet wird.
> 'A' < 'B' // ok
true
> 'a' < 'B' // not ok
false
> 'ä' < 'b' // not ok
falseDer richtige Vergleich von Text liegt außerhalb des Rahmens dieses Buches. Er wird über die ECMAScript Internationalization API (Intl) unterstützt.
Kurze Wiederholung von §19 „Unicode – eine kurze Einführung“.
Code Points sind die atomaren Teile von Unicode-Text. Jeder Code Point ist 21 Bit groß.
JavaScript-Strings implementieren Unicode über das Kodierungsformat UTF-16. Es verwendet eine oder zwei 16-Bit-Code Units, um einen einzelnen Code Point zu kodieren.
Grapheme Cluster (vom Benutzer wahrgenommene Zeichen) repräsentieren geschriebene Symbole, wie sie auf dem Bildschirm oder Papier angezeigt werden. Ein oder mehrere Code Points sind erforderlich, um einen einzelnen Grapheme Cluster zu kodieren.
Der folgende Code zeigt, dass ein einzelner Code Point aus einem oder zwei JavaScript-Zeichen besteht. Wir zählen letztere über .length.
// 3 code points, 3 JavaScript characters:
assert.equal('abc'.length, 3);
// 1 code point, 2 JavaScript characters:
assert.equal('🙂'.length, 2);Die folgende Tabelle fasst die gerade untersuchten Konzepte zusammen:
| Entität | Größe | Kodiert über |
|---|---|---|
| JavaScript-Zeichen (UTF-16 Code Unit) | 16 Bit | – |
| Unicode Code Point | 21 Bit | 1–2 Code Units |
| Unicode Grapheme Cluster | 1+ Code Points |
Lassen Sie uns die Werkzeuge von JavaScript für die Arbeit mit Code Points untersuchen.
Ein Unicode Code Point Escape ermöglicht es uns, einen Code Point hexadezimal (1–5 Ziffern) anzugeben. Es erzeugt ein oder zwei JavaScript-Zeichen.
> '\u{1F642}'
'🙂' Unicode-Escape-Sequenzen
In der ECMAScript-Sprachspezifikation werden Unicode Code Point Escapes und Unicode Code Unit Escapes (die wir später antreffen werden) als Unicode Escape Sequences bezeichnet.
String.fromCodePoint() konvertiert einen einzelnen Code Point in 1–2 JavaScript-Zeichen.
> String.fromCodePoint(0x1F642)
'🙂'.codePointAt() konvertiert 1–2 JavaScript-Zeichen in einen einzelnen Code Point.
> '🙂'.codePointAt(0).toString(16)
'1f642'Wir können einen String iterieren, was Code Points (nicht JavaScript-Zeichen) besucht. Die Iteration wird später in diesem Buch beschrieben. Eine Möglichkeit zur Iteration ist die Verwendung einer for-of-Schleife.
const str = '🙂a';
assert.equal(str.length, 3);
for (const codePointChar of str) {
console.log(codePointChar);
}
// Output:
// '🙂'
// 'a'Array.from() basiert ebenfalls auf der Iteration und besucht Code Points.
> Array.from('🙂a')
[ '🙂', 'a' ]Das macht es zu einem guten Werkzeug zum Zählen von Code Points.
> Array.from('🙂a').length
2
> '🙂a'.length
3Indizes und Längen von Strings basieren auf JavaScript-Zeichen (wie sie durch UTF-16 Code Units dargestellt werden).
Um eine Code Unit hexadezimal anzugeben, können wir einen Unicode Code Unit Escape mit genau vier Hexadezimalziffern verwenden.
> '\uD83D\uDE42'
'🙂'Und wir können String.fromCharCode() verwenden. Zeichencode ist der Name der Standardbibliothek für Code Unit.
> String.fromCharCode(0xD83D) + String.fromCharCode(0xDE42)
'🙂'Um den Zeichencode eines Zeichens zu erhalten, verwenden Sie .charCodeAt().
> '🙂'.charCodeAt(0).toString(16)
'd83d'Wenn der Code Point eines Zeichens unter 256 liegt, können wir ihn über einen ASCII-Escape mit genau zwei Hexadezimalziffern referenzieren.
> 'He\x6C\x6Co'
'Hello'(Der offizielle Name für ASCII-Escapes ist Hexadecimal escape sequences – es war der erste Escape, der Hexadezimalzahlen verwendete.)
Beim Arbeiten mit Text, der in jeder menschlichen Sprache geschrieben sein kann, ist es am besten, an den Grenzen von Grapheme Clustern zu trennen, nicht an den Grenzen von Code Points.
TC39 arbeitet an Intl.Segmenter, einem Vorschlag für die ECMAScript Internationalization API zur Unterstützung der Unicode-Segmentierung (entlang von Grapheme Cluster-Grenzen, Wortgrenzen, Satzgrenzen usw.).
Bis dieser Vorschlag zum Standard wird, können wir eine der verschiedenen verfügbaren Bibliotheken verwenden (suchen Sie im Web nach „JavaScript grapheme“).
Tabelle 14 beschreibt, wie verschiedene Werte in Strings umgewandelt werden.
x |
String(x) |
|---|---|
undefined |
'undefined' |
null |
'null' |
| boolean | false → 'false', true → 'true' |
| number | Beispiel: 123 → '123' |
| bigint | Beispiel: 123n → '123' |
| string | x (Eingabe, unverändert) |
| symbol | Beispiel: Symbol('abc') → 'Symbol(abc)' |
| object | Konfigurierbar über z.B. toString() |
String.fromCharCode() [ES1].charCodeAt() [ES1]String.fromCodePoint() [ES6].codePointAt() [ES6]String.prototype: Suchen und Abgleichen(String.prototype ist dort gespeichert, wo die Methoden von Strings sind.)
.endsWith(searchString: string, endPos=this.length): boolean [ES6]
Gibt true zurück, wenn der String mit searchString enden würde, wenn seine Länge endPos wäre. Gibt andernfalls false zurück.
> 'foo.txt'.endsWith('.txt')
true
> 'abcde'.endsWith('cd', 4)
true.includes(searchString: string, startPos=0): boolean [ES6]
Gibt true zurück, wenn der String searchString enthält, andernfalls false. Die Suche beginnt bei startPos.
> 'abc'.includes('b')
true
> 'abc'.includes('b', 2)
false.indexOf(searchString: string, minIndex=0): number [ES1]
Gibt den niedrigsten Index zurück, an dem searchString im String vorkommt, oder -1. Jeder zurückgegebene Index ist minIndex oder größer.
> 'abab'.indexOf('a')
0
> 'abab'.indexOf('a', 1)
2
> 'abab'.indexOf('c')
-1.lastIndexOf(searchString: string, maxIndex=Infinity): number [ES1]
Gibt den höchsten Index zurück, an dem searchString im String vorkommt, oder -1. Jeder zurückgegebene Index ist maxIndex oder kleiner.
> 'abab'.lastIndexOf('ab', 2)
2
> 'abab'.lastIndexOf('ab', 1)
0
> 'abab'.lastIndexOf('ab')
2[1 von 2] .match(regExp: string | RegExp): RegExpMatchArray | null [ES3]
Wenn regExp ein regulärer Ausdruck ohne das Flag /g ist, gibt .match() den ersten Treffer für regExp im String zurück. Oder null, wenn kein Treffer gefunden wurde. Wenn regExp ein String ist, wird er verwendet, um einen regulären Ausdruck zu erstellen (denken Sie an den Parameter von new RegExp()), bevor die oben genannten Schritte ausgeführt werden.
Das Ergebnis hat folgenden Typ:
interface RegExpMatchArray extends Array<string> {
index: number;
input: string;
groups: undefined | {
[key: string]: string
};
}Nummerierte Erfassungsgruppen werden zu Array-Indizes (deshalb erweitert dieser Typ Array). Benannte Erfassungsgruppen (ES2018) werden zu Eigenschaften von .groups. In diesem Modus funktioniert .match() wie RegExp.prototype.exec().
Beispiele
> 'ababb'.match(/a(b+)/)
{ 0: 'ab', 1: 'b', index: 0, input: 'ababb', groups: undefined }
> 'ababb'.match(/a(?<foo>b+)/)
{ 0: 'ab', 1: 'b', index: 0, input: 'ababb', groups: { foo: 'b' } }
> 'abab'.match(/x/)
null[2 von 2] .match(regExp: RegExp): string[] | null [ES3]
Wenn das Flag /g von regExp gesetzt ist, gibt .match() entweder ein Array mit allen Treffern oder null zurück, wenn kein Treffer gefunden wurde.
> 'ababb'.match(/a(b+)/g)
[ 'ab', 'abb' ]
> 'ababb'.match(/a(?<foo>b+)/g)
[ 'ab', 'abb' ]
> 'abab'.match(/x/g)
null.search(regExp: string | RegExp): number [ES3]
Gibt den Index zurück, an dem regExp im String vorkommt. Wenn regExp ein String ist, wird er verwendet, um einen regulären Ausdruck zu erstellen (denken Sie an den Parameter von new RegExp()).
> 'a2b'.search(/[0-9]/)
1
> 'a2b'.search('[0-9]')
1.startsWith(searchString: string, startPos=0): boolean [ES6]
Gibt true zurück, wenn searchString im String am Index startPos vorkommt. Gibt andernfalls false zurück.
> '.gitignore'.startsWith('.')
true
> 'abcde'.startsWith('bc', 1)
trueString.prototype: Extrahieren.slice(start=0, end=this.length): string [ES3]
Gibt den Teilstring des Strings zurück, der am (einschließlich) Index start beginnt und am (ausschließlich) Index end endet. Wenn ein Index negativ ist, wird er zur .length addiert, bevor er verwendet wird (-1 wird zu this.length-1 usw.).
> 'abc'.slice(1, 3)
'bc'
> 'abc'.slice(1)
'bc'
> 'abc'.slice(-2)
'bc'.at(index: number): string | undefined [ES2022]
Gibt das JavaScript-Zeichen am index als String zurück. Wenn index negativ ist, wird er zur .length addiert, bevor er verwendet wird (-1 wird zu this.length-1 usw.).
> 'abc'.at(0)
'a'
> 'abc'.at(-1)
'c'.split(separator: string | RegExp, limit?: number): string[] [ES3]
Teilt den String in ein Array von Teilstrings auf – die Strings, die zwischen den Trennzeichen vorkommen. Das Trennzeichen kann ein String sein.
> 'a | b | c'.split('|')
[ 'a ', ' b ', ' c' ]Es kann auch ein regulärer Ausdruck sein.
> 'a : b : c'.split(/ *: */)
[ 'a', 'b', 'c' ]
> 'a : b : c'.split(/( *):( *)/)
[ 'a', ' ', ' ', 'b', ' ', ' ', 'c' ]Der letzte Aufruf zeigt, dass von Gruppen im regulären Ausdruck gemachte Erfassungen zu Elementen des zurückgegebenen Arrays werden.
Warnung: .split('') teilt einen String in JavaScript-Zeichen auf. Das funktioniert nicht gut, wenn man mit Astral-Code-Points (die als zwei JavaScript-Zeichen kodiert sind) arbeitet. Emojis sind zum Beispiel astral.
> '🙂X🙂'.split('')
[ '\uD83D', '\uDE42', 'X', '\uD83D', '\uDE42' ]Stattdessen ist es besser, Array.from() (oder das Spreizen) zu verwenden.
> Array.from('🙂X🙂')
[ '🙂', 'X', '🙂' ].substring(start: number, end=this.length): string [ES1]
Verwenden Sie .slice() anstelle dieser Methode. .substring() wurde in älteren Engines nicht konsistent implementiert und unterstützt keine negativen Indizes.
String.prototype: Kombinieren.concat(...strings: string[]): string [ES3]
Gibt die Verkettung des Strings und strings zurück. 'a'.concat('b') ist äquivalent zu 'a'+'b'. Letzteres ist viel beliebter.
> 'ab'.concat('cd', 'ef', 'gh')
'abcdefgh'.padEnd(len: number, fillString=' '): string [ES2017]
Fügt (Fragmente von) fillString an den String an, bis er die gewünschte Länge len erreicht hat. Wenn er len bereits erreicht oder überschreitet, wird er unverändert zurückgegeben.
> '#'.padEnd(2)
'# '
> 'abc'.padEnd(2)
'abc'
> '#'.padEnd(5, 'abc')
'#abca'.padStart(len: number, fillString=' '): string [ES2017]
Fügt (Fragmente von) fillString vor den String ein, bis er die gewünschte Länge len erreicht hat. Wenn er len bereits erreicht oder überschreitet, wird er unverändert zurückgegeben.
> '#'.padStart(2)
' #'
> 'abc'.padStart(2)
'abc'
> '#'.padStart(5, 'abc')
'abca#'.repeat(count=0): string [ES6]
Gibt den String count mal verkettet zurück.
> '*'.repeat()
''
> '*'.repeat(3)
'***'String.prototype: Transformieren.normalize(form: 'NFC'|'NFD'|'NFKC'|'NFKD' = 'NFC'): string [ES6]
Normalisiert den String gemäß den Unicode-Normalisierungsformen.
[1 von 2] .replaceAll(searchValue: string | RegExp, replaceValue: string): string [ES2021]
Was tun, wenn Sie
.replaceAll() nicht verwenden können
Wenn .replaceAll() auf Ihrer Zielplattform nicht verfügbar ist, können Sie stattdessen .replace() verwenden. Wie das geht, wird in §43.6.8.1 „str.replace(searchValue, replacementValue) [ES3]“ erklärt.
Ersetzt alle Treffer von searchValue durch replaceValue. Wenn searchValue ein regulärer Ausdruck ohne Flag /g ist, wird ein TypeError ausgelöst.
> 'x.x.'.replaceAll('.', '#')
'x#x#'
> 'x.x.'.replaceAll(/./g, '#')
'####'
> 'x.x.'.replaceAll(/./, '#')
TypeError: String.prototype.replaceAll called with
a non-global RegExp argumentSonderzeichen in replaceValue sind:
$$: wird zu $$n: wird zur Erfassung der nummerierten Gruppe n (leider steht $0 für den String '$0', es bezieht sich nicht auf den vollständigen Treffer)$&: wird zum vollständigen Treffer$`: wird zu allem vor dem Treffer$': wird zu allem nach dem TrefferBeispiele
> 'a 1995-12 b'.replaceAll(/([0-9]{4})-([0-9]{2})/g, '|$2|')
'a |12| b'
> 'a 1995-12 b'.replaceAll(/([0-9]{4})-([0-9]{2})/g, '|$&|')
'a |1995-12| b'
> 'a 1995-12 b'.replaceAll(/([0-9]{4})-([0-9]{2})/g, '|$`|')
'a |a | b'Benannte Erfassungsgruppen (ES2018) werden ebenfalls unterstützt.
$<name> wird zur Erfassung der benannten Gruppe name.Beispiel
assert.equal(
'a 1995-12 b'.replaceAll(
/(?<year>[0-9]{4})-(?<month>[0-9]{2})/g, '|$<month>|'),
'a |12| b');[2 von 2] .replaceAll(searchValue: string | RegExp, replacer: (...args: any[]) => string): string [ES2021]
Wenn der zweite Parameter eine Funktion ist, werden die Vorkommen durch die Strings ersetzt, die sie zurückgibt. Ihre Parameter args sind:
matched: string. Der vollständige Trefferg1: string|undefined. Die Erfassung der nummerierten Gruppe 1g2: string|undefined. Die Erfassung der nummerierten Gruppe 2offset: number. Wo wurde der Treffer im Eingabestring gefunden?input: string. Der gesamte Eingabestring.const regexp = /([0-9]{4})-([0-9]{2})/g;
const replacer = (all, year, month) => '|' + all + '|';
assert.equal(
'a 1995-12 b'.replaceAll(regexp, replacer),
'a |1995-12| b');Benannte Erfassungsgruppen (ES2018) werden ebenfalls unterstützt. Wenn welche vorhanden sind, wird am Ende ein Argument mit einem Objekt hinzugefügt, dessen Eigenschaften die Erfassungen enthalten.
const regexp = /(?<year>[0-9]{4})-(?<month>[0-9]{2})/g;
const replacer = (...args) => {
const groups=args.pop();
return '|' + groups.month + '|';
};
assert.equal(
'a 1995-12 b'.replaceAll(regexp, replacer),
'a |12| b');.replace(searchValue: string | RegExp, replaceValue: string): string [ES3]
.replace(searchValue: string | RegExp, replacer: (...args: any[]) => string): string [ES3]
.replace() funktioniert wie .replaceAll(), ersetzt aber nur das erste Vorkommen, wenn searchValue ein String oder ein regulärer Ausdruck ohne /g ist.
> 'x.x.'.replace('.', '#')
'x#x.'
> 'x.x.'.replace(/./, '#')
'#.x.'Weitere Informationen zu dieser Methode finden Sie in §43.6.8.1 „str.replace(searchValue, replacementValue) [ES3]“.
.toUpperCase(): string [ES1]
Gibt eine Kopie des Strings zurück, bei der alle Kleinbuchstaben in Großbuchstaben umgewandelt wurden. Wie gut das für verschiedene Alphabete funktioniert, hängt von der JavaScript-Engine ab.
> '-a2b-'.toUpperCase()
'-A2B-'
> 'αβγ'.toUpperCase()
'ΑΒΓ'.toLowerCase(): string [ES1]
Gibt eine Kopie des Strings zurück, bei der alle Großbuchstaben in Kleinbuchstaben umgewandelt wurden. Wie gut das für verschiedene Alphabete funktioniert, hängt von der JavaScript-Engine ab.
> '-A2B-'.toLowerCase()
'-a2b-'
> 'ΑΒΓ'.toLowerCase()
'αβγ'.trim(): string [ES5]
Gibt eine Kopie des Strings zurück, bei der alle führenden und nachfolgenden Leerzeichen (Leerzeichen, Tabulatoren, Zeilenumbrüche usw.) entfernt wurden.
> '\r\n#\t '.trim()
'#'
> ' abc '.trim()
'abc'.trimEnd(): string [ES2019]
Ähnlich wie .trim(), aber nur das Ende des Strings wird getrimmt.
> ' abc '.trimEnd()
' abc'.trimStart(): string [ES2019]
Ähnlich wie .trim(), aber nur der Anfang des Strings wird getrimmt.
> ' abc '.trimStart()
'abc ' Übung: String-Methoden verwenden
exercises/strings/remove_extension_test.mjs
Quiz
Siehe Quiz-App.