import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'filterHighlightSearchResult', }) export class FilterHighlightSearchPipe implements PipeTransform { public transform(value: string, args?: string): string { const needMatchValue = args; // 用户在input框输入的值 let endValue = value; // 最终处理好并高亮标识的结果 const isEnglishReg = new RegExp('^[a-zA-Z]+$'); if (isEnglishReg.test(needMatchValue)) { // 输入拼音的情况 endValue = this.getEndMatchedValue(value, needMatchValue, value); } else { const searchValue = needMatchValue; const regExp = new RegExp(searchValue, 'gi'); // 全局匹配忽略大小写 if (regExp.test(value)) { endValue = this.getEndMatchedValue(value, needMatchValue, value); } } return endValue; } public getEndMatchedValue(value: string, searchValue: string, oriValue: string): string { if (searchValue) { let endValue = oriValue; const upperValue = value.toUpperCase(); const upperSearch = searchValue.toUpperCase(); const matchIndex = upperValue.indexOf(upperSearch); if (matchIndex !== -1) { // 将匹配到的内容进行高亮标注 endValue = oriValue.substring(0, matchIndex) + `${oriValue.substring(matchIndex, matchIndex + searchValue.length)}` + oriValue.substring(matchIndex + searchValue.length); } return endValue; } else { return oriValue; } } }