216 votes

Javascript camelCase de Forme Régulière

J'ai essayé d'obtenir un JavaScript regex commande pour l'activer quelque chose comme thisString en This String , mais la plus proche que j'ai obtenu est de remplacer une lettre, résultant en quelque chose comme Thi String ou This tring. Des idées?

Pour clarifier, je peux gérer la simplicité de la capitalisation d'une lettre, je ne suis pas aussi forte avec la RegEx, et le fractionnement somethingLikeThis en something Like This est là que je vais avoir des ennuis.

480voto

Vincent Robert Points 16530
"thisStringIsGood"
    // insert a space before all caps
    .replace(/([A-Z])/g, ' $1')
    // uppercase the first character
    .replace(/^./, function(str){ return str.toUpperCase(); })

affiche

This String Is Good

99voto

Matt Wiebe Points 151

J'avais un ralenti d'intérêt dans ce, particulièrement dans l'utilisation de séquences de capitales, comme dans xmlHTTPRequest. La liste des fonctions serait de produire des "Xml H T T P Demande" ou "Xml HTTPRequest", mine produit "Xml HTTP Request".

function unCamelCase (str){
    return str
        // insert a space between lower & upper
        .replace(/([a-z])([A-Z])/g, '$1 $2')
        // space before last upper in a sequence followed by lower
        .replace(/\b([A-Z]+)([A-Z])([a-z])/, '$1 $2$3')
        // uppercase the first character
        .replace(/^./, function(str){ return str.toUpperCase(); })
}

Il y a aussi une Chaîne.version prototype dans un résumé.

28voto

PleaseStand Points 16718

Cela peut être fait de manière concise avec la regex lookahead (démo):

function splitCamelCaseToString(s) {
    return s.split(/(?=[A-Z])/).join(' ');
}

(Je pensais que l' g (global) drapeau a été nécessaire, mais curieusement, il n'est pas dans ce cas particulier.)

À l'aide d'anticipation avec split garantit que le contenu de la lettre majuscule n'est pas consommé et évite de traiter avec un espace si UpperCamelCase est quelque chose que vous devez traiter. Pour mettre en majuscule la première lettre de chaque, vous pouvez utiliser:

function splitCamelCaseToString(s) {
    return s.split(/(?=[A-Z])/).map(function(p) {
        return p.charAt(0).toUpperCase() + p.slice(1);
    }).join(' ');
}

L' map méthode de la baie est un ES5, mais vous pouvez toujours l'utiliser dans les navigateurs plus anciens avec un peu de code à partir de MDC. Alternativement, vous pouvez effectuer une itération sur les éléments d'un tableau à l'aide d'un for boucle.

14voto

kennebec Points 33886
function spacecamel(s){
    return s.replace(/([a-z])([A-Z])/g, '$1 $2');
}

spacecamel('somethingLikeThis')

// valeur de retour: quelque chose Comme Ceci

7voto

SamGoody Points 4406

Une solution qui gère les numéros:

function capSplit(str){
   return str.replace
      ( /(^[a-z]+)|[0-9]+|[A-Z][a-z]+|[A-Z]+(?=[A-Z][a-z]|[0-9])/g
      , function(match, first){
          if (first) match = match[0].toUpperCase() + match.substr(1);
          return match + ' ';
          }
       )
   }

Testé ici [JSFiddle, pas de bibliothèque. Pas essayé IE]; devrait être assez stable.

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