[英]Capitalize First letter, lowercase the rest, with exceptions
我有一些数据需要格式化,每个单词的第一个字母大写,其余的都小写。 我正在使用以下内容:
function toTitleCase(str){
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
它可以工作,但是我需要为其添加例外,所有值都在一个数组中:[USA,USA,7UP,PC,SlimFast,...]
这些值有时较高,有时较低,有时是混合的,无需修改。 有任何想法吗?
与此类似的事情呢:
function toTitleCase(str){
var ignore = inArray(exceptionsArr, str);
if (!ignore) {
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
return str;
}
inArray: function(arr, obj) {
return (arr.indexOf(obj) != -1);
},
或者,如果您的str是一个完整的句子,其中包含异常词,则可以将str拆分为单个词,然后使用for循环通过上述过程运行每个词。
function toTitleCase(str){
var cantTouchThis = {'USA' : 1, 'U.S.A' : 1, '7UP' : 1, 'PC' : 1, 'SLIMFAST' : 1};
return str.replace(/\w[\S.]*/g, function(txt){return cantTouchThis[txt.toUpperCase()] ? txt : txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
键是您不想替换的字符串的大写形式
值可以是任何评估为true
但您可能还想给出唯一正确的大小写,例如:
function toTitleCase(str){
var cantTouchThis = {'USA' : 'USA', 'U.S.A' : 'USA', '7UP' : '7Up', 'PC' : 'PC', 'SLIMFAST' : 'SlimFast'};
return str.replace(/\w[\S.]*/g, function(txt){return cantTouchThis[txt.toUpperCase()] || txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
这样的字符串像:
UsA USA anything slimfast
会变成:
USA USA Anything SlimFast
使用以下功能解决。
function toTitleCase(str){
return str.replace(/\w\S*/g, function(txt){
if(['PC','USA','U.S.A'].includes(txt))===-1){
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
} else {
return txt;
}
});
}
name = toTitleCase(name);
它可能不完全是您所需要的,但总体思路是:
- 分割/定位每个单词。
- 检查它是否与忽略列表中的单词不匹配(使用
i
标志忽略大写)- 如果没有,请大写,
- 如果是这样,请不要理会它。
var s = "UsA bar U.S.A. fOO slimfast bAz",
ignore = ["USA", "U.S.A", "7UP", "PC", "SlimFast"],
regex = new RegExp(ignore.join("|"), 'i'),
result = s.split(' ').map(function(word){
return (regex.test(word)) ? word : capitalize(word);
}).join(' ');
// "UsA Bar U.S.A. Foo slimfast Baz"
function capitalize(s) {
return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();
}
编辑:似乎我不太明白例外是整个词。 下面的答案将例外作为单词的一部分。
我不确定这是否是最好的解决方案,但是您可以对异常进行匹配,然后运行函数,然后再替换匹配。
var exceptions = ['USA','U\.S\.A','7UP','PC','SlimFast']; //escaped strings!
var matcher = new RegExp(exceptions.join('|'), 'gi');
var str = 'tuSalolpCOKyes'; //test string
var matches = str.match(matcher); // extract replacements
var str = toTitleCase(str); // run your function
// replace stuff you didn't want changed
var index = 0;
var str = str.replace(matcher, function() {
return matches[index++];
});
console.log(str); // RESULT: TuSalolpCokyes
// your function
function toTitleCase(str){
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.