【问题标题】:Capitalize a cyrillic strings with JavaScript使用 JavaScript 将西里尔字符串大写
【发布时间】:2017-04-19 22:22:45
【问题描述】:

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

【问题讨论】:

    标签: angularjs regex angular-filters capitalize


    【解决方案1】:

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

    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 Wiki 文章并相应地更新正则表达式),也许,您只是想将俄语与А-ЯЁёа-я 匹配,然后使用var block = "\\wА-ЯЁёа-я
    • 最终的正则表达式将块中定义的字符或字符串开头以外的任何字符匹配并捕获到第 1 组中,然后将块中定义的任何字符匹配并捕获到第 2 组中。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        试试看:

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

        Example

        【讨论】:

        • 不,这将大写任何位置的字母。此处需要自定义单词边界。
        • 我同意,这个例子返回"ТОВА Е НЯКАКЪВ НИЗ",但我宁愿需要"Това Е Някакъв Низ"
        • 对不起,1 分钟)
        猜你喜欢
        • 2011-07-24
        • 2021-11-16
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多