背景

我有要转换为标题的电视节目列表。我当前的代码在“ bojack骑士”,“家庭盖伊”和“杰西卡·琼斯”等程序上运行良好。但是,我的某些程序中有首字母缩写词。结果,诸如“天堂pd”的标题将被转换为“天堂Pd”。

我已经研究过正则表达式作为一种可能的解决方案,并访问了一些站点,尤其是(Regex101)[https://regex101.com/])以查看是否可以找到某些东西。也许我没有在他们的图书馆中使用正确的搜索词,但是我在那里没有运气。

这是我想要做的最好的解决方案还是有更好的方法?

我的代码

titleSort = () => {
    // make sure all program names are in title case
    let titleCasePrograms = this.props.programs.map(program => program.name.split(' ')
        .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())
        .join(' '))
}


我希望实现的目标

上面的代码是我正在按字母顺序对名称进行排序的较大批处理的一部分。但是,在开始使用实际的排序方法之前,我想确保我考虑到了不同类型的单词,然后将它们正确格式化。 :-)

非常感谢您的时间和建议!

最佳答案

计算机无法知道什么是缩写词,因此您需要有一个缩写词列表。一旦有了,就可以在该转换中添加针对该列表的检查。像这样:

const acronyms = ['PD', 'MD', 'ASAP', 'NCIS']; // ...etc....
titleSort = () => {
    let titleCasePrograms = this.props.programs.map(program => {
        return program.name.split(' ')
                          .map(w => {
                              if (acronyms.includes(w.toUpperCase())) {
                                  return w.toUpperCase();
                              }
                              return w[0].toUpperCase() + w.substr(1).toLowerCase();
                          })
                          .join(' ')
    );
}

10-07 21:09