用JavaScript编写西里尔字符串
问题描述:
我正在制作一个AngularJS过滤器,它将每个单词的首字母大写。 它与a-zA-Z字母配合良好,但在我的情况下,我还使用西里尔文字符,并且希望使其工作。用JavaScript编写西里尔字符串
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
答
需要自定义字边界,你可以建立使用分组:
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);
详细:
- 的
block
包含所有ASCII字母,数字和下划线,并从basic Cyrillic range所有基本西里尔字符(如果你需要更多的,请参阅Cyrillic script in Unicode ranges维基文章和更新的正则表达式因此),也许,你只是想匹配俄罗斯与А-ЯЁёа-я
,然后使用var block = "\\wА-ЯЁёа-я
- 最终正则表达式匹配并捕获到组1除块或字符串开始处定义的字符以外的任何字符,然后将该块中定义的任何字符与第2组相匹配并捕获。
答
试试:
function capitalizer(string) {
return string.split(/\s/).map(function(item){
return (item.charAt(0).toUpperCase() + item.slice(1))
}).join(' ')
}
没有,这将使任何位置的字母具有优先权。这里需要自定义字边界。 –
我同意,这个例子返回'“ТОВАЕНЯКАКЪВНИЗ”',但我更需要'“ТоваЕНякакъвНиз”' – Leo
对不起,伙计们,1min) –