在Javascript中将字符串转换为Pascal大小写(也称为大写)

在Javascript中将字符串转换为Pascal大小写(也称为大写),javascript,regex,case,Javascript,Regex,Case,我想知道如何在javascript中将字符串转换为pascal大小写字符串(最有可能是regex) 转换示例: 双管 双管 双管 双管 查看有关Pascal案例的更多信息 s = s.replace(/(\w)(\w*)/g, function(g0,g1,g2){return g1.toUpperCase() + g2.toLowerCase();}); 正则表达式查找单词(此处使用\w-字母数字和下划线定义),并将它们分成两组-第一个字母和单词的其余部分。然后它使用一个

我想知道如何在javascript中将字符串转换为pascal大小写字符串(最有可能是regex)

转换示例:

  • 双管
  • 双管
  • 双管
  • 双管
查看有关Pascal案例的更多信息

s = s.replace(/(\w)(\w*)/g,
        function(g0,g1,g2){return g1.toUpperCase() + g2.toLowerCase();});
正则表达式查找单词(此处使用
\w
-字母数字和下划线定义),并将它们分成两组-第一个字母和单词的其余部分。然后它使用一个函数作为回调函数来设置适当的大小写

例如:

或者,这也会起作用-少一点正则表达式,多一些字符串操作:

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

我应该补充一点,这根本不是pascal的情况,因为你有单词障碍(
helloworld
vs
helloworld
)。没有它们,这个问题几乎无法解决,即使有一本字典。这是一个更常见的标题案例,虽然它不处理“FBI”、“the”或“McDonalds”等词。

我的建议是:

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());
}
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');
  });
});

测试用例:

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());
}
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');
  });
});

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

e、 g


注意,尽管我认为Title Case不同于Pascal Case(大写),Title Case=Double-barrel Pascal Case=Double-BarrelTitle Case可能会产生误导。它有一个独特的意义,不符合正常英语。Titlecase是一个Unicode大小写属性,主要用于仅首字母大写的情况。它适用于某些有向图,不同于其他字符,如DZvsDzvsdz。相比之下,英文标题的适当大小写的效果则大不相同,除了第一个或最后一个单词等,忽略短介词。这不应该是公认的答案。尝试将字符串
fooBar
转换为
fooBar
,它将失败。@RenanCoelho-这太苛刻了。可能有“转换为帕斯卡案例”的味道。在本例中,OP希望忽略单词-
DoUbLE
->
DoUbLE
的原始大小写。如果你的情况不同,我相信你可以找到一个更合适的问题。这只转换第一个字母。它输出的是
Double-barrel
而不是
Double-barrel
您用过卡米凯斯吗?请再次检查此示例。此解决方案也可与
分离器一起使用(即
双桶
=>
双桶