Convert camelCaseText to Sentence Case Text

后端 未结 20 2053
闹比i
闹比i 2020-11-28 03:44

How can I convert a string either like \'helloThere\' or \'HelloThere\' to \'Hello There\' in JavaScript?

相关标签:
20条回答
  • 2020-11-28 04:29

    Based on one of the examples above I came up with this:

    const camelToTitle = (camelCase) => camelCase
      .replace(/([A-Z])/g, (match) => ` ${match}`)
      .replace(/^./, (match) => match.toUpperCase())
      .trim()
    

    It works for me because it uses .trim() to handle the edge case where the first letter is capitalized and you end up with a extra leading space.

    Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim

    0 讨论(0)
  • 2020-11-28 04:29

    try this library

    http://sugarjs.com/api/String/titleize

    'man from the boondocks'.titleize()>"Man from the Boondocks"
    'x-men: the last stand'.titleize()>"X Men: The Last Stand"
    'TheManWithoutAPast'.titleize()>"The Man Without a Past"
    'raiders_of_the_lost_ark'.titleize()>"Raiders of the Lost Ark"
    
    0 讨论(0)
  • 2020-11-28 04:30

    I had a similar problem and dealt with it like this:

    stringValue.replace(/([A-Z]+)*([A-Z][a-z])/g, "$1 $2")
    

    For a more robust solution:

    stringValue.replace(/([A-Z]+)/g, " $1").replace(/([A-Z][a-z])/g, " $1")
    

    http://jsfiddle.net/PeYYQ/

    Input:

     helloThere 
     HelloThere 
     ILoveTheUSA
     iLoveTheUSA
    

    Output:

     hello There 
     Hello There 
     I Love The USA
     i Love The USA
    
    0 讨论(0)
  • 2020-11-28 04:33

    If you deal with Capital Camel Case this snippet can help you, also it contains some specs so you could be sure that it matches appropriate to your case.

    export const fromCamelCaseToSentence = (word) =>
      word
        .replace(/([A-Z][a-z]+)/g, ' $1')
        .replace(/([A-Z]{2,})/g, ' $1')
        .replace(/\s{2,}/g, ' ')
        .trim();
    

    And specs:

    describe('fromCamelCaseToSentence', () => {
     test('does not fall with a single word', () => {
       expect(fromCamelCaseToSentence('Approved')).toContain('Approved')
       expect(fromCamelCaseToSentence('MDA')).toContain('MDA')
     })
    
     test('does not fall with an empty string', () => {
       expect(fromCamelCaseToSentence('')).toContain('')
     })
    
     test('returns the separated by space words', () => {
       expect(fromCamelCaseToSentence('NotApprovedStatus')).toContain('Not Approved Status')
       expect(fromCamelCaseToSentence('GDBState')).toContain('GDB State')
       expect(fromCamelCaseToSentence('StatusDGG')).toContain('Status DGG')
     })
    })
    
    0 讨论(0)
  • 2020-11-28 04:33

    Adding yet another ES6 solution that I liked better after not being happy with a few thoughts above.

    https://codepen.io/902Labs/pen/mxdxRv?editors=0010#0

    const camelize = (str) => str
        .split(' ')
        .map(([first, ...theRest]) => (
            `${first.toUpperCase()}${theRest.join('').toLowerCase()}`)
        )
        .join(' ');
    
    0 讨论(0)
  • 2020-11-28 04:36

    This implementation takes consecutive uppercase letters and numbers in consideration.

    function camelToTitleCase(str) {
      return str
        .replace(/[0-9]{2,}/g, match => ` ${match} `)
        .replace(/[^A-Z0-9][A-Z]/g, match => `${match[0]} ${match[1]}`)
        .replace(/[A-Z][A-Z][^A-Z0-9]/g, match => `${match[0]} ${match[1]}${match[2]}`)
        .replace(/[ ]{2,}/g, match => ' ')
        .replace(/\s./g, match => match.toUpperCase())
        .replace(/^./, match => match.toUpperCase())
        .trim();
    }
    
    // ----------------------------------------------------- //
    
    var testSet = [
        'camelCase',
        'camelTOPCase',
        'aP2PConnection',
        'superSimpleExample',
        'aGoodIPAddress',
        'goodNumber90text',
        'bad132Number90text',
    ];
    
    testSet.forEach(function(item) {
        console.log(item, '->', camelToTitleCase(item));
    });

    Expected output:

    camelCase -> Camel Case
    camelTOPCase -> Camel TOP Case
    aP2PConnection -> A P2P Connection
    superSimpleExample -> Super Simple Example
    aGoodIPAddress -> A Good IP Address
    goodNumber90text -> Good Number 90 Text
    bad132Number90text -> Bad 132 Number 90 Text
    
    0 讨论(0)
提交回复
热议问题