【发布时间】:2011-05-03 09:15:30
【问题描述】:
我想知道如何在 javascript 中将字符串转换为帕斯卡大小写字符串(很可能是正则表达式)。
转换示例:
- 双桶 = 双桶
- 双桶 = 双桶
- DoUbLE-BaRRel = 双桶
- 双枪管 = 双枪管
查看this link 了解有关 Pascal Case 的更多信息
【问题讨论】:
标签: javascript regex case
我想知道如何在 javascript 中将字符串转换为帕斯卡大小写字符串(很可能是正则表达式)。
转换示例:
查看this link 了解有关 Pascal Case 的更多信息
【问题讨论】:
标签: javascript regex case
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();});
我应该补充一点,这根本不是帕斯卡大小写,因为你有单词障碍(helloworld vs hello-world)。没有它们,即使有字典,问题也几乎无法解决。这通常被称为 Title Case,尽管它不处理诸如“FBI”、“the”或“McDonalds”之类的词。
【讨论】:
fooBar转换为FooBar,会失败。
DoUbLE -> Double。如果你的场景不同,我相信你能找到更合适的问题。
这是我的建议:
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');
});
});
【讨论】:
【讨论】:
Double-barrel 而不是DoubleBarrel
. 分隔符(即double.barrel => DoubleBarrel)
const toPascalCase = (sentence) => sentence
.split(' ')
.map(word => word[0]
.toUpperCase()
.concat(word.slice(1)))
.join('');
toPascalCase(words);
【讨论】: