简体   繁体   中英

Convert "Sentence case" to "camelCase" in JavaScript

Having a difficult time finding a solution to this, there are several solutions for the reverse.

I have considered replacing every " " and the following first character with an uppercase version of itself:

value.toLowerCase().replace(/\s+/g, function (g) { return g[1].toUpperCase() })

Only, the regex /\s+/g needs to be changed to match the first character.

If there is an existing question that is exactly this, provide link and I will close this myself. I can't find a solution on SO


Examples:

"I walk my dog to the park" or "i Walk my DOG to the Park" => "iWalkMyDogToThePark"

You need to catch the next character. You can use (.) or ([az])

var toCamelCase = function(string){
  return string.replace(/\s+(.)/g, function (match, group) { 
    return group.toUpperCase()  
  })
}

Maybe you could use this:

function camelCase(value) { 
    return value.toLowerCase().replace(/\s+(.)/g, function(match, group1) {
        return group1.toUpperCase();
    });
}

(taken from here )

Are you looking for something like this:

var string = "Hello there what are You doing yes";
string.replace(/([A-Z])([a-z]+)\s+([a-z])([a-z]+)/g, function($1, $2, $3, $4, $5) { 
    return $2.toLowerCase() + $3 + $4.toUpperCase() + $5; 
});

This prints out "helloThere what are youDoing yes" .

You can use this camel case conversion code:

function toCamelCase(str) {
  return str.replace(/(?:^.|[A-Z]|\b.)/g, function(letter, index) {
    return index == 0 ? letter.toLowerCase() : letter.toUpperCase();
  }).replace(/\s+/g, '');
}

var val = toCamelCase("Sentence case");
//=> sentenceCase

val = toCamelCase('hello how are you');
//=> helloHowAreYou

I think a simpler solution can be achieved without Regex. Just split the string from spaces, and join them with the appropriate casing.

var value = '...';

var camelCase = value.split(' ').map(function(word, i) {
    return (word[0] || '')[i == 0 ? 'toLowerCase' : 'toUpperCase']() +
           word.substr(1).toLowerCase();
}).join('');

JSFiddle

I ended up doing the following (ES6):

function camelCase (str) {
    return str.split(/[^a-zA-Z0-9]/g).map((x, index) => {
        if (index === 0) return x.toLowerCase()
        return x.substr(0, 1).toUpperCase() + x.substr(1).toLowerCase()
    }).join('')
}

It takes the assumption that in general, the aim to convert to camelCase is for variables, so no accents or odd chars should be present (or will be split).

camelCase("I walk my dog to the park")
> "iWalkMyDogToThePark"
function camelCase(sentence){
  return sentence.replace("\'","").split(' ').map((item,index) => (index === 0 ? item[0].toLowerCase() : item[0].toUpperCase())+item.substring(1)).join('');
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM