我正在制作一个AngularJS过滤器,它将每个单词的第一个字母大写。 它适用于a-zA-Z字母,但在我的情况下,我也使用西里尔字符,我想让它工作。
var strLatin = "this is some string";
var strCyrillic = "това е някакъв низ";
var newLatinStr = strLatin.replace(/\b[\wа-яА-Я]/g, function(l){
return l.toUpperCase();
});
var newCyrillicStr = strCyrillic.replace(/\b[\wа-яА-Я]/g, function(l){
return l.toUpperCase();
});
我在这里得到了一些CodePen示例:http://codepen.io/brankoleone/pen/GNxjRM
答案 0 :(得分:1)
您需要使用分组构建自定义字边界:
statvfs64()
<强>详情:
var strLatin = "this is some string";
var strCyrillic = "това е някакъв низ";
var block = "\\w\\u0400-\\u04FF";
var rx = new RegExp("([^" + block + "]|^)([" + block + "])", "g");
var newLatinStr = strLatin.replace(rx, function($0, $1, $2){
return $1+$2.toUpperCase();
});
console.log(newLatinStr);
var newCyrillicStr = strCyrillic.replace(rx, function($0, $1, $2){
return $1+$2.toUpperCase();
});
console.log(newCyrillicStr);
包含所有ASCII字母,数字和下划线以及来自basic Cyrillic range的所有基本西里尔字符(如果您需要更多内容,请参阅Cyrillic script in Unicode ranges Wiki文章并相应地更新正则表达式),也许,您只想将俄语与block
匹配,然后使用А-ЯЁёа-я
答案 1 :(得分:1)
如果您使用Lodash,您可以使用_.startCase
而不是您自己的实现(他们通过将字符串拆分为单词,将每个单词的第一个字符大写然后再将它们连接在一起来实现)
答案 2 :(得分:0)
试一试:
function capitalizer(string) {
return string.split(/\s/).map(function(item){
return (item.charAt(0).toUpperCase() + item.slice(1))
}).join(' ')
}