【问题标题】:Make name uppercase with multiple capital letters使用多个大写字母将名称设为大写
【发布时间】:2015-07-17 02:19:13
【问题描述】:

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

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

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

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

【问题讨论】:

  • 从外观上看,您并没有明确定义每种情况的模式(麦当劳 [2 个首字母],iPhone [1 个字母]),所以我会去找一个前缀列表,然后从单词中子串该前缀然后使其他所有内容大写然后加入两个!
  • @Xufox 我正在使用 Javascript,它没有后向功能
  • 在 javascrit 中你不能用正则表达式进行这种替换。
  • 这似乎是一件非常奇怪的事情。如果您不打算将Mc 中的c 大写,为什么还要大写它后面的所有内容?
  • 它用于编写脚本(提词器),所有内容都大写(出于可读性原因)。虽然名字全部大写(当一个应该是小写时)也不错,但在很多情况下这会很有用(因为它所在的城镇有两个大写字母)

标签: javascript regex capitalization


【解决方案1】:

这似乎有效:

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

【讨论】:

  • 如果开头没有McX,我想他想把整个东西都大写。所以Smith 应该变成SMITH
  • @Barmar 那么他为什么想要这个iPhone => iPHONE
  • 他说那是特例
  • 这是一个 TelePrompTer,所以普通文本是大写的。他只对iMc 等前缀使用混合大小写。
  • 这个答案绝对是最好的!我只是在寻找一种方法来实现它以遍历每个单词来检查它(除非有一种方法可以用正则表达式来做到这一点,我认为没有)(是的,我希望史密斯去史密斯)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
相关资源
最近更新 更多