2
votes

JS: Comment mettre en majuscule la première lettre de chaque mot séparé par un symbole dans une chaîne?

Mon JS fonctionne bien lorsque la chaîne a un mot:

  • BRUNO ==> Bruno

Cela fonctionne bien aussi lorsque la chaîne est un espace sEparés mots:

  • JEAN MARC ==> Jean Marc

Mais quand c'est un trait de soulignement séparé des mots que j'ai? :

  • JEAN-FRANCOIS ==> Jean-francois ( faux )^

Mon objectif est de le généraliser pour obtenir cela:

  • JEAN-FRANCOIS ==> Jean-François

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 >


1 commentaires

quels sont tous les séparateurs disponibles que vous avez sauf -


4 Réponses :


0
votes

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"));


0 commentaires

1
votes

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'));


0 commentaires

1
votes

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));


0 commentaires

0
votes

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


0 commentaires