Mon JS fonctionne bien lorsque la chaîne a un mot:
Cela fonctionne bien aussi lorsque la chaîne est un espace sEparés mots:
Mais quand c'est un trait de soulignement séparé des mots que j'ai? :
Mon objectif est de le généraliser pour obtenir cela:
Comment puis-je le faire devenir COMME CELA?
Mon script est celui-ci:
capitalizeString(str) { var lowerString = str.toLowerCase(); return lowerString.replace(/(^| )(\w)/g, (x) => { return x.toUpperCase(); }); }
p >
4 Réponses :
Vous pouvez mettre en majuscule chaque première lettre ainsi que chaque lettre après les symboles comme ceci:
function capitalizeString(str) { var lowerString = str.toLowerCase(); return lowerString.replace(new RegExp("(?:\\b|_)([a-z])", "g"), (x) => { return x.toUpperCase(); }); } console.log(capitalizeString("abcd-efgh"));
Vous pouvez ajouter le trait d'union ( -
) dans le cadre du RegEx:
function capitalizeString(str) { var lowerString = str.toLowerCase(); return lowerString.replace(/(^|[ -])(\w)/g, (x) => { return x.toUpperCase(); }); } console.log(capitalizeString('BRUNO')); console.log(capitalizeString('JEAN MARC')); console.log(capitalizeString('JEAN-FRANCOIS'));
Si vous allez avoir de nombreux séparateurs, vous pouvez créer un tableau avec eux et l'utiliser pour créer dynamiquement votre regex. Comme ceci:
const separators = ['^', ' ', '-']; const capitalizeString = (str) => str.toLowerCase() .replace(new RegExp(`(${separators.join('|')})\\w`, 'g'), (x) => x.toUpperCase()); const s1 = 'BRUNO'; const s2 = 'JEAN MARC'; const s3 = 'JEAN-MARC'; console.log(capitalizeString(s1)); console.log(capitalizeString(s2)); console.log(capitalizeString(s3));
String.prototype.capitalized = function () { return this.toLowerCase().replace(/(^|[^a-z])[a-z]/g, v => v.toUpperCase()); }; console.log('I-love-YOU-guy'.capitalized()); // => I-Love-You-Guy
quels sont tous les séparateurs disponibles que vous avez sauf
-