使用多个大写字母将名称设为大写

Make name uppercase with multiple capital letters

基本上,我想执行以下操作:

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

我也在研究 iPhone => iPHONE 之类的东西,但我可能只会为此使用一组列表。但是,名称会定期更改,保留 运行 个列表会带来不便。

这可以吗?我在看正则表达式,但我想不出没有后视的方法(我正在使用 JavaScript)。

这似乎有效:

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();
  }
};

它基本上是在第一个小写字母之后查找第一个大写字母,将第一部分与其余部分分开,并将其余部分设为大写。只有在找到这样的模式时才会发生这种情况。否则它只是 returns 大写的名称。

用法

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