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

Posted

技术标签:

【中文标题】在 Javascript 中将字符串转换为 Pascal Case(又名 UpperCamelCase)【英文标题】:Convert string to Pascal Case (aka UpperCamelCase) in Javascript 【发布时间】:2011-05-03 09:15:30 【问题描述】:

我想知道如何在 javascript 中将字符串转换为帕斯卡大小写字符串(很可能是正则表达式)。

转换示例:

双桶 = 双桶 双桶 = 双桶 DoUbLE-BaRRel = 双桶 双枪管 = 双枪管

查看this link 了解有关 Pascal Case 的更多信息

【问题讨论】:

【参考方案1】:
s = s.replace(/(\w)(\w*)/g,
        function(g0,g1,g2)return g1.toUpperCase() + g2.toLowerCase(););

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

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

另外,这也可以工作 - 少一点正则表达式和多一点字符串操作:

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

我应该补充一点,这根本不是帕斯卡大小写,因为你有单词障碍(helloworld vs hello-world)。没有它们,即使有字典,问题也几乎无法解决。这通常被称为 Title Case,尽管它不处理诸如“FBI”、“the”或“McDonalds”之类的词。

【讨论】:

正确,虽然我认为 Title Case 不同于 Pascal Case (Uppercamelcase) Title Case = Double-barrel Pascal Case = Double-Barrel 标题大小写可能具有误导性。它具有与普通英语不符的独特含义。 Titlecase 是一个 Unicode 大小写属性,主要用于只有第一个字母应该大写的情况。它适用于与其他字符不同的某些二合字母,例如 DZ 与 Dz 与 dz。相比之下,英文标题的正确大小写则完全不同,忽略短介词,除非是第一个或最后一个单词等。 这不应该是公认的答案。尝试将字符串fooBar转换为FooBar,会失败。 @RenanCoelho - 这太苛刻了。可能有“转换为帕斯卡大小写”的味道。在这一个中,OP 想要忽略单词的原始大小写 - DoUbLE -> Double。如果你的场景不同,我相信你能找到更合适的问题。【参考方案2】:

这是我的建议:

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(/\w/), s => s.toUpperCase());

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(/\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');
    chai.assert.equal(toPascalCase('Here i am'), 'HereIAm');
  );
);

【讨论】:

感谢您的建议!刚刚更新了功能。 轰隆隆!互联网变得更好;)@kalicki2k【参考方案3】:

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

例如

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

【讨论】:

这只会转换第一个字母。它输出Double-barrel 而不是DoubleBarrel 你用过_.camelCase吗?请再次检查示例 很好的解决方案,也适用于. 分隔符(即double.barrel => DoubleBarrel【参考方案4】:
const toPascalCase = (sentence) => sentence
   .split(' ')
   .map(word => word[0]
   .toUpperCase()
   .concat(word.slice(1)))
   .join('');

toPascalCase(words);

【讨论】:

以上是关于在 Javascript 中将字符串转换为 Pascal Case(又名 UpperCamelCase)的主要内容,如果未能解决你的问题,请参考以下文章

javascript 如何在Javascript中将字符串转换为数字?

在javascript中将字符串转换为印度格式

在 JavaScript 中将数字转换为字符串的最佳方法是啥?

如何在 JavaScript 中将字符串转换为布尔值?

如何在Javascript中将字符串转换为对象? [复制]

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