我已经看到TitleCase用于大写字符串的每个单词,但这很有用...
我想输出已全部存储为小写的电影标题。我可以使用TitleCase,但这不会带来人们通常期望的外观。
例如,电影标题(小写):
胆小鬼罗伯特·福特(Roward Ford)对杰西·詹姆斯的暗杀
我可以使用TitleCase进行输出:
胆小鬼罗伯特·福特(Robert Ford)对杰西·詹姆斯的暗杀。
无论是在杂志上还是在电影海报上以印刷品的形式出现时,'of'和'的 O 和 B 从不大写。
除了简单地使用{{movie.title | titlecase}}
之外,是否有一种简单的方法可以使我获得想要的外观?
我知道我可以创建一个字典并在字符串中搜索关键字,但是我想要一些可能更简单的东西...
答案 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)
如果仅用于显示目的,建议使用默认管道,因为该框架将处理大小写转换。