J'essayais de créer un tube en texte dactylographié qui diviserait une chaîne PascalCase, mais ce serait bien si cela se divisait également en chiffres. J'aimerais également qu'il se divise en majuscules consécutives. J'ai ce tuyau, qui fonctionne très bien, sauf qu'il ne fonctionne que dans Chrome et non Firefox, évidemment, seul Chrome prend en charge les rétrospectifs. Comment peut-on accomplir cela sans regarder en arrière?
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;
}
Ainsi, par exemple, une chaîne ANet15Amount
doit être transformée en A Net 15 Amount
. Cette expression régulière ci-dessus diviserait également une chaîne camelCase, mais ce n'est pas nécessaire à prendre en compte.
javascript
regex
typescript
develmatik
la source
la source
.replace(/([A-Z]|\d+)/g, " $1").trim();
(?!^)([A-Z]|\d+)
évite le premier espace et n'a pas besoin d'ajustement.Réponses:
Que diriez-vous de l' appariement par un motif plus basique comme celui-ci et de rejoindre l' espace.
D'abord, j'ai pensé simplement,
[A-Z][a-z]*|\d+
mais cela se briserait par exempleABCDefg123
enA B C Defg 123
ce qui serait différent en fonction de votre fonction actuelle, qui se transforme enABC Defg 123
.Il y a encore une petite différence. Le vôtre se transforme
A1B2
enA 1B 2
celui-ciA 1 B 2
où je pense que celui-ci serait plus précis, n'est-ce pas.la source
Remplacez simplement toute lettre majuscule
[A-Z]
ou toute séquence de chiffres\d+
par un espace plus ce que nous venons de faire correspondre" $1"
. Nous sautons la première lettre afin qu'aucun espace ne soit ajouté au début de la chaîne résultante en ajoutant un lookahead négatif au début de la chaîne(?!^)
:Exemple:
Afficher l'extrait de code
la source
Essayer
[A-Z]?[a-z]+|[A-Z]|[0-9]+
Test dans le générateur: https://regex101.com/r/uBO0P5/1
la source
Je suppose que cela dépend des conventions de la chaîne, ce qui peut augmenter la complexité
la source