我想知道如何在javascript (&最有可能是regex)中将字符串转换为pascal案例字符串。
转换实例:
查看此链接以获得更多关于Pascal案件的信息
发布于 2010-11-01 11:49:12
s = s.replace(/(\w)(\w*)/g,
function(g0,g1,g2){return g1.toUpperCase() + g2.toLowerCase();});
regex查找单词(这里使用\w
定义--字母数字和下划线),并将它们分为两个组--第一个字母和单词的其余部分。然后,它使用一个函数作为回调来设置适当的大小写。
示例:http://jsbin.com/uvase
或者,这也会起作用-更少的正则表达式和更多的字符串操作:
s = s.replace(/\w+/g,
function(w){return w[0].toUpperCase() + w.slice(1).toLowerCase();});
我应该补充一点,这根本不是pascal的情况,因为您有单词障碍(helloworld
vs hello-world
)。没有它们,这个问题几乎是无法解决的,即使用字典也是如此。这通常被称为标题案例,尽管它不处理诸如"FBI“、"the”或"McDonalds“之类的词。
发布于 2018-12-28 02:07:50
,这是我的建议:
function toPascalCase(string) {
return `${string}`
.toLowerCase()
.replace(new RegExp(/[-_]+/, 'g'), ' ')
.replace(new RegExp(/[^\w\s]/, 'g'), '')
.replace(
new RegExp(/\s+(.)(\w*)/, 'g'),
($1, $2, $3) => `${$2.toUpperCase() + $3}`
)
.replace(new RegExp(/\w/), s => s.toUpperCase());
}
或
String.prototype.toPascalCase = function() {
return this
.toLowerCase()
.replace(new RegExp(/[-_]+/, 'g'), ' ')
.replace(new RegExp(/[^\w\s]/, 'g'), '')
.replace(
new RegExp(/\s+(.)(\w*)/, 'g'),
($1, $2, $3) => `${$2.toUpperCase() + $3}`
)
.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');
chai.assert.equal(toPascalCase('FOO BAR'), 'FooBar');
});
});
发布于 2019-11-19 20:08:22
https://stackoverflow.com/questions/4068573
复制相似问题