Saltar al contenido

Convertir string a Pascal Case (también conocido como UpperCamelCase) en Javascript

Intenta entender el código de forma correcta antes de aplicarlo a tu proyecto si tdeseas aportar algo puedes decirlo en los comentarios.

Solución:

s = s.replace(/(w)(w*)/g,
        function(g0,g1,g2)return g1.toUpperCase() + g2.toLowerCase(););

La expresión regular encuentra palabras (definidas aquí usando w – alfanuméricos y guiones bajos) y los separa en dos grupos: la primera letra y el resto de la palabra. A continuación, utiliza una función como devolución de llamada para establecer el caso adecuado.

Ejemplo: http://jsbin.com/uvase

Alternativamente, esto también funcionará: un poco menos de expresiones regulares y más string manipulación:

s = s.replace(/w+/g,
        function(w)return w[0].toUpperCase() + w.slice(1).toLowerCase(););

Debo agregar que este no es un caso pascal en absoluto, ya que tienes barreras de palabras (helloworld contra hello-world). Sin ellos, el problema es casi irresoluble, incluso con un diccionario. Esto se denomina más comúnmente Caso de título, aunque no maneja palabras como “FBI”, “el” o “McDonalds”.

Aquí está mi sugerencia:

function toPascalCase(string) 
  return `$string`
    .replace(new RegExp(/[-_]+/, 'g'), ' ')
    .replace(new RegExp(/[^ws]/, 'g'), '')
    .replace(
      new RegExp(/s+(.)(w+)/, 'g'),
      ($1, $2, $3) => `$$2.toUpperCase() + $3.toLowerCase()`
    )
    .replace(new RegExp(/s/, 'g'), '')
    .replace(new RegExp(/w/), s => s.toUpperCase());

o

String.prototype.toPascalCase = function() 
  return this
    .replace(new RegExp(/[-_]+/, 'g'), ' ')
    .replace(new RegExp(/[^ws]/, 'g'), '')
    .replace(
      new RegExp(/s+(.)(w+)/, 'g'),
      ($1, $2, $3) => `$$2.toUpperCase() + $3.toLowerCase()`
    )
    .replace(new RegExp(/s/, 'g'), '')
    .replace(new RegExp(/w/), s => s.toUpperCase());
;

Casos de prueba:

describe('String to pascal case', function() 
  it('should return a pascal cased string', function() 
    chai.assert.equal(toPascalCase('foo bar'), 'FooBar');
    chai.assert.equal(toPascalCase('Foo Bar'), 'FooBar');
    chai.assert.equal(toPascalCase('fooBar'), 'FooBar');
    chai.assert.equal(toPascalCase('FooBar'), 'FooBar');
    chai.assert.equal(toPascalCase('--foo-bar--'), 'FooBar');
    chai.assert.equal(toPascalCase('__FOO_BAR__'), 'FooBar');
    chai.assert.equal(toPascalCase('!--foo-¿?-bar--121-**%'), 'FooBar121');
  );
);

En caso de guión, espacio y otros son string separadores uno puede usar lodash.

p.ej

_.upperFirst(_.camelCase('double-barrel')); // => DoubleBarrel

valoraciones y comentarios

Más adelante puedes encontrar las interpretaciones de otros sys admins, tú también tienes la habilidad dejar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *