使用JavaScript将西里尔字符串大写

时间:2016-12-05 13:46:14

标签: angularjs regex angular-filters capitalize

我正在制作一个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

3 个答案:

答案 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组中除了在块或字符串开头中定义的字符之外的任何字符,然后匹配并捕获到块2中定义的任何字符串。

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

Example