基本上,我想做以下事情:
McDonald => McDONALD
McDowell => McDOWELL
McIntosh => McINTOSH
etc.
我也在调查像iPhone =>这样的事情。 iPHONE,但我可能只会使用一个集合列表。但是,名称会定期更改,因此保留正在运行的列表会带来不便。
有可能这样做吗?我正在考虑使用正则表达式,但是我没有想到一种方法来做到这一点而没有后悔(我使用的是JavaScript)。
答案 0 :(得分:6)
这似乎有效:
var convertName = function(name){
var pattern=/^(.*?[a-z][A-Z])(.*)$/g;
if(pattern.test(name)){
return name.replace(pattern,function(t,a,b){
return a+b.toUpperCase();
});
}
else{
return name.toUpperCase();
}
};
它基本上是在第一个小写字母之后查找第一个大写字母,将第一个部分与其余部分分开并使其余部分为大写。如果找到这样的模式,则只会发生这种情况。否则它只是以大写形式返回名称。
convertName('McDonald'); // McDONALD
convertName('McDowell'); // McDOWELL
convertName('McIntosh'); // McINTOSH
convertName('iPhone'); // iPHONE
convertName('Smith'); // SMITH
最简单的方法是匹配每组字母并将其放入函数中。您可以使用:
"Word, test, “words”, McIntosh is a name, just like Herbert-McIntosh. So much upper-case.".replace(/(\w+)/g,function(t,w){
return convertName(w);
});
// "WORD, TEST, “WORDS”, McINTOSH IS A NAME, JUST LIKE HERBERT-McINTOSH. SO MUCH UPPER-CASE."
// Prefix after a dash ^^^