用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(' ') 
} 

Example

+0

没有,这将使任何位置的字母具有优先权。这里需要自定义字边界。 –

+0

我同意,这个例子返回'“ТОВАЕНЯКАКЪВНИЗ”',但我更需要'“ТоваЕНякакъвНиз”' – Leo

+0

对不起,伙计们,1min) –

如果使用Lodash,你可以使用_.startCase,而不是你自己的实现(他们这样做是通过分割字符串转换成单词,大写每个单词的第一个字符,然后将它们连接到一起)