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

Capitalize a cyrillic strings with JavaScript

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

试一试:

function capitalizer(string) {
  return string.split(/\s/).map(function(item){
    return (item.charAt(0).toUpperCase() + item.slice(1))
  }).join(' ')
}

Example

您需要一个可以使用分组构建的自定义词边界:

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([=10=], , ){ 
    return +.toUpperCase();
});
console.log(newLatinStr);
var newCyrillicStr = strCyrillic.replace(rx, function([=10=], , ){ 
    return +.toUpperCase();
});
console.log(newCyrillicStr);

详情:

  • block 包含来自 basic Cyrillic range (if you need more, see Cyrillic script in Unicode ranges Wiki 文章的所有 ASCII 字母、数字和下划线以及所有基本西里尔字符,并相应地更新正则表达式),也许,您只想将俄语与 А-ЯЁёа-я,然后使用 var block = "\wА-ЯЁёа-я
  • 最终的正则表达式匹配块中定义的字符或字符串开头以外的任何字符并将其捕获到组 1 中,然后匹配块中定义的任何字符并将其捕获到组 2 中。

如果你使用 Lodash,你可以使用 _.startCase 而不是你自己的实现(他们通过将字符串拆分成单词,将每个单词的第一个字符大写,然后将它们重新连接在一起来实现)