如何在 TypeScript 中缩写驼峰式文本字符串 / JavaScript

How to Abbreviate camel-case text string in TypeScript / JavaScript

我有一些大 table.column 名字需要缩写。或者更确切地说 table 名称需要缩写。

以下面的 table.col 个名称为例,它们应该是什么样子:

agentByState5Minutes.agentId ----> aBS5M.agentId
contactReasonByMail.agentName -----> cRBM.agentName

如您所见,table 名称是大小写和数字的混合体。在我的函数中,我将 table 名称从列名称中拆分出来以使其更容易:

protected columnNameConvert(colName: string): string{
    this.log.info('columnNameConvert:colName:'+ colName);
    let colNameSplit: Array<string> = colName.split('.');
    let tableName: string = colNameSplit[0];
    let realColName: string = colNameSplit[1];

    return colName;
}

table名称是否可以使用正则表达式文本操作进行缩写?

我会使用 replace 来匹配不是大写字母、数字或字符串开头的任何内容,同时寻找 . 和(在beginning) 检查位置不在字符串的开头:

const change = str => str.replace(
  /(?!^)[^A-Z\d](?=[^.]*\.)/g,
  ''
);
console.log(
  change('agentByState5Minutes.agentId'), // ----> aBS5M.agentId
  change('contactReasonByMail.agentName') // -----> cRBM.agentName
);

(?!^)[^A-Z\d](?=[^.]*\.) 表示:

  • (?!^) - 字符串开头的负前瞻(确保匹配的位置不在字符串的开头)
  • [^A-Z\d] - 除了大写字母或数字之外的任何内容
  • (?=[^.]*\.) - 确保匹配的字符最终后跟 .

在 Typescript 语法中:

const columnNameConvert = (colName: string) => colName.replace(
  /(?!^)[^A-Z\d](?=[^.]*\.)/g,
  '',
);

(请记住,如果 TS 可以自行推断,则无需明确表示 return 类型)