Angular-TitleCase-我们可以使用非大写形式的“ in”之类的词吗?

时间:2018-08-23 10:35:30

标签: javascript angular typescript

我已经看到TitleCase用于大写字符串的每个单词,但这很有用...

我想输出已全部存储为小写的电影标题。我可以使用TitleCase,但这不会带来人们通常期望的外观。

例如,电影标题(小写):

  

胆小鬼罗伯特·福特(Roward Ford)对杰西·詹姆斯的暗杀

我可以使用TitleCase进行输出:

  

胆小鬼罗伯特·福特(Robert Ford)对杰西·詹姆斯的暗杀。

无论是在杂志上还是在电影海报上以印刷品的形式出现时,'of''的 O B 从不大写。

除了简单地使用{{movie.title | titlecase}}之外,是否有一种简单的方法可以使我获得想要的外观?

我知道我可以创建一个字典并在字符串中搜索关键字,但是我想要一些可能更简单的东西...

2 个答案:

答案 0 :(得分:1)

您可以编写自己的管道,以将每个单词大写,除了您不想大写的单词。

import { Pipe, PipeTransform } from '@angular/core'

@Pipe({ name: 'titleCaseExcept' })
export class TitleCaseExceptPipe implements PipeTransform {
  transform(value: string): string {
    if (!value) return value; // safeguard

    // regex to find all words EXCEPT the ones we don't want capitalized
    let words: RegExp = /\b(?!of|by|the)\w+/g;
    // capitalize the first letters of said words
    let newVal = value.replace(words, (match) => {
      return match.replace(/^\w/, (word) => word.charAt(0).toUpperCase() + word.substr(1).toLowerCase());
    })

    // always capitalize the first character of newVal
    return newVal.charAt(0).toUpperCase() + newVal.substr(1);
  }
}

在您认为合适的情况下,将想要排除的单词添加到正则表达式中。

答案 1 :(得分:-1)

如果仅用于显示目的,建议使用默认管道,因为该框架将处理大小写转换。