在Javascript中将字符串转换为Pascal Case(又名UpperCamelCase)

Blo*_*sie 17 javascript regex case

我想知道如何将字符串转换为javascript中的pascal case字符串(最常见的是regex).

转换示例:

  • 双桶=双桶
  • DOUBLE-BARREL = Double-Barrel
  • DoUbLE-BaRRel = Double-Barrel
  • 双桶=双桶

有关Pascal Case的更多信息,请查看此链接

Kob*_*obi 26

s = s.replace(/(\w)(\w*)/g,
        function(g0,g1,g2){return g1.toUpperCase() + g2.toLowerCase();});
Run Code Online (Sandbox Code Playgroud)

正则表达式找到单词(这里使用\w- 字母数字和下划线定义),并将它们分成两组 - 第一个字母和单词的其余部分.然后它使用函数作为回调来设置正确的大小写.

示例:http://jsbin.com/uvase

或者,这也可以工作 - 少一点正则表达式和更多的字符串操作:

s = s.replace(/\w+/g,
        function(w){return w[0].toUpperCase() + w.slice(1).toLowerCase();});
Run Code Online (Sandbox Code Playgroud)

我应该补充一下这根本不是pascal的情况,因为你有单词障碍(helloworldvs hello-world).没有它们,即使使用字典,问题也几乎无法解决.这通常被称为标题案例,但它不处理像"FBI","the"或"McDonalds"这样的词.

  • 现货,虽然我认为 Title Case 与 Pascal Case 不同(大驼峰) Title Case = Double-barrel Pascal Case = Double-Barrel (2认同)
  • 这不应该是公认的答案。尝试将字符串`fooBar`转换为`FooBar`,它将失败。 (2认同)

use*_*176 16

如果破折号、空格和其他是字符串分隔符,可以使用lodash

例如

_.upperFirst(_.camelCase('double-barrel')); // => DoubleBarrel
Run Code Online (Sandbox Code Playgroud)


小智 9

这是我的建议:

function toPascalCase(string) {
  return `${string}`
    .replace(new RegExp(/[-_]+/, 'g'), ' ')
    .replace(new RegExp(/[^\w\s]/, '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());
}
Run Code Online (Sandbox Code Playgroud)

要么

String.prototype.toPascalCase = function() {
  return this
    .replace(new RegExp(/[-_]+/, 'g'), ' ')
    .replace(new RegExp(/[^\w\s]/, '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());
};
Run Code Online (Sandbox Code Playgroud)

测试用例:

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');
  });
});
Run Code Online (Sandbox Code Playgroud)

  • 不适用于“FooBar”和“fooBar” (3认同)