是否有一个简单的方法来转换字符串标题大小写?例如,约翰·史密斯变成了约翰·史密斯。我不是在寻找像John Resig的解决方案那样复杂的东西,只是(希望)一些一两行代码。
当前回答
我用正则表达式回答。
更多regex信息:https://regex101.com/r/AgRM3p/1
function toTitleCase(string = '') { const regex = /^[a-z]{0,1}|\s\w/gi; string = string.toLowerCase(); string.match(regex).forEach((char) => { string = string.replace(char, char.toUpperCase()); }); return string; } const input = document.getElementById('fullname'); const button = document.getElementById('button'); const result = document.getElementById('result'); button.addEventListener('click', () => { result.innerText = toTitleCase(input.value); }); <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Test</title> </head> <body> <input type="text" id="fullname"> <button id="button">click me</button> <p id="result">Result here</p> <script src="./index.js"></script> </body> </html>
其他回答
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();
});
}
一种稍微优雅一点的方式,改编了Greg Dean的功能:
String.prototype.toProperCase = function () {
return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
};
这样称呼它:
"pascal".toProperCase();
String.prototype.capitalize = function() {
return this.toLowerCase().split(' ').map(capFirst).join(' ');
function capFirst(str) {
return str.length === 0 ? str : str[0].toUpperCase() + str.substr(1);
}
}
用法:
"hello world".capitalize()
function titleCase(str) {
str = str.toLowerCase();
var strArray = str.split(" ");
for(var i = 0; i < strArray.length; i++){
strArray[i] = strArray[i].charAt(0).toUpperCase() + strArray[i].substr(1);
}
var result = strArray.join(" ");
//Return the string
return result;
}
这是我的版本,在我看来很容易理解,也很优雅。
Const STR = "foo bar baz"; const newStr = str.split(' ') .map(w => w[0].toUpperCase() + w.substring(1).toLowerCase()) . join (' '); console.log (newStr);