在javascript中大写带连字符的名称

时间:2016-02-19 12:00:57

标签: javascript regex

我需要在javascript中大写名称,到目前为止,我已经在SO上找到了这些方法:

// doesn't capitalize first letter after hyphen -> gives Bjørn-martin
str.replace(/\w\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); });

// capitalizes after hyphen, but also after funny Norwegian characters (æøå) -> gives BjøRn-Martin
str.replace(/\b[\w']+\b/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); });

// same as first
str = str.toLowerCase().replace(/^[\u00C0-\u1FFF\u2C00-\uD7FF\w]|\s[\u00C0-\u1FFF\u2C00-\uD7FF\w]/g, function(letter) {
    return letter.toUpperCase();
});

当试图大写bjørn-martin时,他们都没有处理滑稽的挪威字符和连字符。

我并不完全精通正则表达式,并且想知道是否有人能指出我正确的方向,以便bjørn-martin正确地大写为Bjørn-Martin

2 个答案:

答案 0 :(得分:5)

这应该符合您的需求:

var capitalized = input.replace(/(^|[\s-])\S/g, function (match) {
    return match.toUpperCase();
});

答案 1 :(得分:0)

这是一个可配置的方法。这将允许您指定单词分隔符。

您需要的模式:/(^|-)(\w)/g

function transformToUpperCase(str, separators) {
  separators = separators || [ ' ' ];
  var regex = new RegExp('(^|[' + separators.join('') + '])(\\w)', 'g');
  return str.toLowerCase().replace(regex, function(x) { return x.toUpperCase(); });
}

document.body.innerHTML = transformToUpperCase('bjørn-martin', ['-']);