1 import { PipeTransform, Pipe } from '@angular/core'
2 import { SafeHtml } from '@angular/platform-browser'
4 // Thanks https://gist.github.com/adamrecsko/0f28f474eca63e0279455476cc11eca7#gistcomment-2917369
5 @Pipe({ name: 'highlight' })
6 export class HighlightPipe implements PipeTransform {
7 /* use this for single match search */
8 static SINGLE_MATCH: string = "Single-Match"
9 /* use this for single match search with a restriction that target should start with search string */
10 static SINGLE_AND_STARTS_WITH_MATCH: string = "Single-And-StartsWith-Match"
11 /* use this for global search */
12 static MULTI_MATCH: string = "Multi-Match"
16 contentString: string = null,
17 stringToHighlight: string = null,
18 option: string = "Single-And-StartsWith-Match",
19 caseSensitive: boolean = false,
20 highlightStyleName: string = "search-highlight"
22 if (stringToHighlight && contentString && option) {
24 let caseFlag: string = !caseSensitive ? "i" : ""
26 case "Single-Match": {
27 regex = new RegExp(stringToHighlight, caseFlag)
30 case "Single-And-StartsWith-Match": {
31 regex = new RegExp("^" + stringToHighlight, caseFlag)
35 regex = new RegExp(stringToHighlight, "g" + caseFlag)
39 // default will be a global case-insensitive match
40 regex = new RegExp(stringToHighlight, "gi")
43 const replaced = contentString.replace(
45 (match) => `<span class="${highlightStyleName}">${match}</span>`