Ich habe versucht, eine Pipe in Typoskript zu erstellen, die eine PascalCase-Zeichenfolge aufteilt, aber es wäre schön, wenn dies auch auf Ziffern aufgeteilt würde. Ich möchte auch, dass es in aufeinanderfolgende Großbuchstaben aufgeteilt wird. Ich habe diese Pipe, die großartig funktioniert, außer dass sie nur in Chrome und nicht in Firefox funktioniert. Offensichtlich unterstützt nur Chrome Lookbacks. Wie kann dies ohne Rückblicke erreicht werden?
transform(value: string): string {
let extracted = '';
if (!value) {
return extracted;
}
const regExSplit = value
.split(new RegExp('(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[0-9])(?=[A-Z][a-z])|(?<=[a-zA-Z])(?=[0-9])'));
for (let i = 0; i < regExSplit.length; i++) {
if (i !== regExSplit.length - 1) {
extracted += `${regExSplit[i]} `;
} else {
extracted += regExSplit[i];
}
}
return extracted;
}
So sollte beispielsweise eine Zeichenfolge ANet15Amount
in transformiert werden A Net 15 Amount
. Dieser reguläre Ausdruck würde auch eine camelCase-Zeichenfolge aufteilen, dies muss jedoch nicht berücksichtigt werden.
javascript
regex
typescript
develmatik
quelle
quelle
.replace(/([A-Z]|\d+)/g, " $1").trim();
(?!^)([A-Z]|\d+)
vermeidet das erste Leerzeichen und benötigt keine Trimmung.Antworten:
Wie wäre es passend durch ein Grundmuster wie diese und Verbinden mit dem Raum.
Zuerst habe ich einfach darüber nachgedacht,
[A-Z][a-z]*|\d+
aber dies würde z. B.ABCDefg123
inA B C Defg 123
eine andere Funktion als Ihre aktuelle Funktion einbrechen , die sich in verwandeltABC Defg 123
.Es gibt noch einen kleinen Unterschied. Deiner verwandelt sich
A1B2
inA 1B 2
und dieser dorthin,A 1 B 2
wo ich denke, dass dieser genauer wäre, nicht wahr?quelle
Ersetzen Sie einfach einen Großbuchstaben
[A-Z]
oder eine Ziffernfolge\d+
durch ein Leerzeichen plus das, was wir gerade gefunden haben" $1"
. Wir überspringen den ersten Buchstaben, damit zu Beginn der resultierenden Zeichenfolge kein Leerzeichen hinzugefügt wird, indem am Anfang der Zeichenfolge ein negativer Lookahead hinzugefügt wird(?!^)
:Beispiel:
Code-Snippet anzeigen
quelle
Versuchen
[A-Z]?[a-z]+|[A-Z]|[0-9]+
Test im Generator: https://regex101.com/r/uBO0P5/1
quelle
Ich denke, es hängt von den Konventionen der Zeichenfolge ab, die die Komplexität erhöhen können
quelle