解析名称以使字符大写和小写

Parsing names to make characters uppper and lowercase

我正在使用这个帮手 class,它非常好,而且工作完美。基本上我把它插入到任何输入的 angular 反应形式中,我需要将每个单词的第一个字母大写,但是我在名称字段上使用它,例如 Derek O'Reilly 的一些名字在 2 个单词之间有一个 ',这个 class 无法处理(请参阅下面的代码)我不是这样的 javascript 高手,但我一直在尝试连接另一个这样的拆分,但没有运气拆分( '\'')

我试图获得的解决方案是让它将所有单词大写,而不管是否有 ' 非常感谢任何提示。

 const words = value.split(' ');

  words.forEach((word, index) => {
    const lower = Transform.lowercase(word);
    words[index] = Transform.upperLetter(lower.substr(0, 1)) + lower.substr(1);
  });

  return words.join(' ');

全帮手class在下面

  class Case {
    upper: string;
    lower: string;

    constructor(upper, lower) {
      this.upper = upper;
      this.lower = lower;
    }
  }

  export class Transform {

    static exceptions = [
      new Case('ß', 'ß')
    ];

    static lowercase = (value: string): string => {
      const letters = value.split('');

      letters.forEach((letter, index) => {
        letters[index] = Transform.lowerLetter(letter);
      });

      return letters.join('');
    }

    static capitalize = (value: string): string => {
      const words = value.split(' ');

      words.forEach((word, index) => {
        const lower = Transform.lowercase(word);
        words[index] = Transform.upperLetter(lower.substr(0, 1)) + lower.substr(1);
      });

      return words.join(' ');
    }

    static upperLetter = (lower: string): string => {
      const _case = Transform.exceptions.find(c => c.lower === lower);
      return _case ? _case.upper : lower.toUpperCase();
    }
    static lowerLetter = (upper: string): string => {
      const _case = Transform.exceptions.find(c => c.upper === upper);
      return _case ? _case.lower : upper.toLowerCase();
    }
  }

尝试使用边框箭头 \b:

let s = "hello wo'rld";

const resp = s.replace(/\b(.)/g, (a, p1) => p1.toUpperCase())

console.log(resp)

你可以试试这个。

const letters = value.split(/[ ']+/)  // to split text either by space or by '