我需要通过大写每个单词的第一个字母来格式化一些数据,并小写其余部分。我使用以下内容:
function toTitleCase(str){
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
它可以工作,但我需要为它添加例外,所有值都在数组中: [美国,U.S.A,七喜,PC,SlimFast,...]
这些值有时高,有时低,有时混合,不需要修改。有什么想法吗?
答案 0 :(得分:2)
如何做到这一点:
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循环运行每个单词。
答案 1 :(得分:1)
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 U.S.A anything slimfast
将成为:
USA USA Anything SlimFast
答案 2 :(得分:1)
使用以下功能解决。
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);
答案 3 :(得分:1)
这可能不是你所需要的,但总体思路是:
- 分割/定位每个单词。
- 检查它是否与忽略列表中的单词不匹配(使用
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();
}
答案 4 :(得分:0)
编辑:似乎我不太明白异常是整个单词。下面的答案是将例外作为单词的一部分。
我不是特别确定这是最好的解决方案,但你可以获得一系列匹配异常,然后运行你的函数,然后替换匹配。
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();});
}