8
votes

Comment faire le premier caractère majuscule de tous les mots en JavaScript?

J'ai recherché une solution mais j'ai encore trouvé.

J'ai la chaîne suivante. xxx

Je veux les convertir en suivant: xxx

s'il n'y a pas d'espace et de soulignement dans la chaîne en majuscule en premier et tous les autres à minuscules. Si les mots sont séparés par le soulignement ou l'espace, puis la première lettre majuscule de chaque mot et enlevez l'espace et le soulignement. Comment puis-je faire cela dans JavaScript.

Merci


2 commentaires

@tvanfosson: Vous pouvez éditer si quelque chose est faux. Merci


fait, et maintenant je vais supprimer mon commentaire car cela n'a plus de sens.


5 Réponses :


11
votes

Vous pouvez faire quelque chose comme ceci: xxx

Vous pouvez le tester Ici , l'approche est assez simple, .Split () la chaîne dans une matrice lors de la recherche d'une espace ou d'un soulignement. Ensuite, boucle à travers la matrice, la barre supérieure de la première lettre, la baisse du reste du reste ... puis prenez cet éventail de mots du titre et .JOIN () Il est à nouveau dans une chaîne.


0 commentaires

6
votes
function foo(str) {
    return $.map(str.split(/\s|_/), function(word) {
        return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
    }).join("");
}

4 commentaires

Pourquoi avoir besoin de jQuery pour cela? Aussi .map () est conçu pour les objets JQuery, pas des tableaux réguliers, utilisez $. Carte () Dans cette situation ... Bien que l'utilisation de jQuery ici (sauf si < Je suis déjà y compris cela) n'est pas une bonne approche ... et c'est moins efficace de toute façon.


@Nick Oui, la performance est plus faible. Cependant, le code est plus petit et plus lisible. Si l'OP utilise de toute façon JQuery sur la page, il devrait aller avec cette solution.


J'ai de bonnes réponses ici. Donc +1 pour tous. Mais la première réponse est acceptée. Merci


Cela supprimera également tous les espaces ou les traits de soulignement sur la chaîne. Aakil Fernandes deviendra Aakilfernandes



14
votes

Voici une solution de regex:

première minuscule la chaîne: p> xxx pré>

remplacez tous les _ code> et les espaces et les premiers caractères dans un mot Avec le caractère majuscule: p> xxx pré>

Démo Strong> p>

Mise à jour: strong> MOINS ÉTAPES;) P>

Explication: P>

/            // start of regex
 (?:         // starts a non capturing group
   _| |\b    // match underscore, space, or any other word boundary character 
             // (which in the end is only the beginning of the string ^)
  )          // end of group
 (           // start capturing group
  \w         // match word character
 )           // end of group
/g           // and of regex and search the whole string


2 commentaires

J'ai de bonnes réponses ici. Donc +1 pour tous. Mais la première réponse est acceptée. Merci


La solution est le meilleur de tous, mais je préfère utiliser // gi et supprimer le str.tolowercase (); ligne.



0
votes

une mise à jour ES6 / fonctionnelle de @ Réponse de Nickcraver . Comme avec la réponse de @ Nickraver, cette fonction gérera correctement plusieurs espaces / traits de soulignement en les filtrant.

p>

const pascalWord = x => x[0].toUpperCase() + x.slice(1).toLowerCase();

const toPascalCase2 = (str) => (
  str.split(/\s|_/)
    .filter(x => x)
    .map(pascalWord)
    .join('')
);

const tests = [
'hello',
'HELLO',
'hello_world',
'HELLO_WORLD',
'Hello World',
'HELLO__WORLD__',
'Hello   World_',
].map(toPascalCase2).join('<br>');

document.write(tests);


5 commentaires

Pourquoi .Filter (x => x) ?


@Mikechamberlain Il filtre des chaînes vierges ['Hello', '', 'World']. Filtre (x => x) = ["Bonjour '," World "] . Il y a probablement une meilleure façon de le faire, mais c'est la façon la plus fonctionnelle que je puisse penser.


Puis dans la carte vous n'avez pas à vous soucier des cordes vides


Ah, Gotha. Yeah Filtre prend un prédicat, voilà ici Cofferes x à un booléen, qui est false pour cordes vierges. Peut-être que !! x serait plus idiomatique?


@Mikechamberlain Voici quelques façons de nouveauté de faire le filtre : Stackoverflow.com/a/2843625/327074



0
votes

var city = city.replace (/ \ s + / g, '') // remplacer tous les espaces à un seul espace ville = ville.replace (/ \ b \ w / g, ville => city .Touppercase ())) // après la lettre de Speace Convertir Capital


1 commentaires

Bienvenue pour! Bien que cela puisse répondre à la question, cela pourrait être plus utile si vous l'amélioriez un peu. Veuillez prendre le temps de vérifier le Aide au formatage et envisagez d'ajouter des informations sur ce que votre code fait