使用多个大写字母命名大写

时间:2015-07-17 02:19:13

标签: javascript regex capitalization

基本上,我想做以下事情:

    McDonald => McDONALD
    McDowell => McDOWELL
    McIntosh => McINTOSH
    etc.

我也在调查像iPhone =>这样的事情。 iPHONE,但我可能只会使用一个集合列表。但是,名称会定期更改,因此保留正在运行的列表会带来不便。

有可能这样做吗?我正在考虑使用正则表达式,但是我没有想到一种方法来做到这一点而没有后悔(我使用的是JavaScript)。

1 个答案:

答案 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 ^^^