84 votes

Regex pour séparer la casse des chameaux

J'ai une expression régulière en JavaScript pour diviser ma chaîne de caractères en majuscules en utilisant le code suivant (que j'ai obtenu par la suite à partir de aquí ):

"MyCamelCaseString"
    .replace(/([A-Z])/g, ' $1')
    .replace(/^./, function(str){ return str.toUpperCase(); })

C'est ainsi que l'on revient :

"My Camel Case String"

Ce qui est une bonne chose. Cependant, je veux passer à la vitesse supérieure. Quelqu'un pourrait-il m'aider avec une expression rationnelle qui séparera si, et seulement si, le premier caractère est en minuscule et le second en majuscule.

Ainsi, l'exemple ci-dessus sera le résultat que j'attends, mais si je le fais :

"ExampleID"

Ensuite, on me renvoie :

"Example ID"

Au lieu de

"Example I D"

Puisqu'il se sépare à chaque majuscule et ignore tout ce qui la précède.

J'espère que cela a du sens ! Et merci :).

3voto

alzed Points 39

Regex pas de limite de mot \B peut également être utilisé

console.log("MyCamelCaseString".replace(/(\B[A-Z])/g, ' $1'));

2voto

Benito Gómez Points 29

Bonjour, je n'ai pas vu de live démo merci @michiel-dral

var tests =[ "camelCase",
             "simple",
             "number1Case2",
             "CamelCaseXYZ",
             "CamelCaseXYZa" 
           ]

function getCamelCaseArray(camel) {
  var reg = /([a-z0-9])([A-Z])/g;
  return camel.replace(reg, '$1 $2').split(' ');
}

function printTest(test) {
document.write('<p>'+test + '=' + getCamelCaseArray(test)+'</p>');
}

tests.forEach(printTest);

<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
  </head>

  <body>
  </body>

</html>

2voto

Kegan VanSickle Points 89

Si vous souhaitez mettre des majuscules et ajouter des espaces entre les chiffres, cela fonctionne également.

transform(value: string, ...args: any[]): string {
    const str = 'this1IsASampleText';
    str.charAt(0).toUpperCase() + value.slice(1); // Capitalize the first letter
    str.replace(/([0-9A-Z])/g, ' $&'); // Add space between camel casing
}

Résultats :

This 1 Is A Sample Text

2voto

Luke Garrigan Points 1086

Si vous êtes comme moi et que vous avez une valeur camelCase telle que :

thisIsMyCamelCaseValue où la première lettre est en minuscule

function fromCamelCase(value) {
    const spaced = value.replace(/([a-z])([A-Z])/g, '$1 $2');
    return spaced.charAt(0).toUpperCase() + spaced.slice(1);
}

0voto

Rimian Points 7805

Je préfère travailler avec des tableaux plutôt qu'avec des chaînes. C'est plus facile à déboguer et plus flexible. Il s'agit d'un join au lieu de replace . Je ne me suis pas occupé des espaces blancs dans les chaînes, mais il est assez facile de couper chaque élément.

const splitCamelCase = str => str.match(/^[A-Z]?[^A-Z]*|[A-Z][^A-Z]*/g).join(' ');

console.log(splitCamelCase('fooMyCamelCaseString'));
console.log(splitCamelCase('MyCamelCaseString'));
console.log(splitCamelCase('XYZMyCamelCaseString'));
console.log(splitCamelCase('alllowercase'));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X