是否有一个简单的方法来转换字符串标题大小写?例如,约翰·史密斯变成了约翰·史密斯。我不是在寻找像John Resig的解决方案那样复杂的东西,只是(希望)一些一两行代码。


当前回答

ES6内衬

const toTitleCase = string => string.split(' ').map((word) => [word[0].toUpperCase(), ...word.substr(1)].join('')).join(' ');

其他回答

Greg Dean的解决方案原型方案:

String.prototype.capitalize = function() {
  return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
var toMatch = "john w. smith";
var result = toMatch.replace(/(\w)(\w*)/g, function (_, i, r) {
      return i.toUpperCase() + (r != null ? r : "");
    }
)

似乎有用… 用上面的测试,“快棕色的狐狸?/跳过/越过了……“C:/程序文件/某些供应商/他们的第二个应用程序/a file1.txt”。

如果你想要2Nd而不是2Nd,你可以更改为/([a-z])(\w*)/g。

第一种形式可以简化为:

function toTitleCase(toTransform) {
  return toTransform.replace(/\b([a-z])/g, function (_, initial) {
      return initial.toUpperCase();
  });
}

吉姆-鲍勃->吉姆-鲍勃

吉姆/鲍勃->吉姆/鲍勃

jim_bob -> jim_bob

不是->不是

学校->学校

麦当劳->麦当劳

function toTitleCase(str) {
  return str.replace(/\p{L}+('\p{L}+)?/gu, function(txt) {
    return txt.charAt(0).toUpperCase() + txt.slice(1)
  })
}

没有正则表达式,没有循环,没有分割,没有子字符串:

String.prototype.toTitleCase = function(){返回this.valueOf().toLowerCase().replace(this.valueOf()[0], this.valueOf()[0].toUpperCase());} console.log(“莱拉”.toTitleCase ());

对于我们这些害怕正则表达式的人(lol):

函数标题案例(str) { var words = str.split(“ ”); for ( var i = 0; i < words.length; i++ ) { var j = words[i].charAt(0).toUpperCase(); 单词[i] = j + words[i].substr(1); } 返回 words.join(“ ”); }