regex - Hur söker och ersätter man från en SafeHtml-variabel i Angular?


Jag har en mycket enkel fråga. Jag har en sanerad sträng och dess typ i Angular är SafeHtml.

Vad skulle vara det bästa sättet att söka och ersätta viss HTML i denna SafeHtml-variabel?

...

const sanitzedHtml: SafeHtml = this.sanitizer.bypassSecurityTrustHtml(changes.pureHtml.currentValue);

...

Mitt mål är att ersätta vissa strängar med lite extra HTML-kod, så det bästa skulle vara att kunna söka bara inom HTML-noderna, inte överallt i koden.

Finns det ett snabbare sätt än att omvandla SafeHtml-variabeln till en sträng igen och använda en grundläggande replace med ett RegExp?

Tack

Svar #1

Ändra HTML-koden innan du sanerar

1 - Att använda regex

Du kan ändra din kod genom att använda Regex på din html-sträng och sedan sanera den.

let html = "<div>myHtml</div>"
const regex = /myRegexPattern/i;
html.replace(regex, 'Replacement html part'));

2 - Använda DocumentFragment

Du kan också skapa ett fragment av din html, ändra det du vill i det och sätta ihop det innan du startar din saneringsfunktion

let str:string = "<div id='test'>myHtml</div>";
const sanitzedHtml:SafeHtml = this.sanitizer.bypassSecurityTrustHtml(changeMyHtml(str));

function changeMyHtml(htmlString:string):string{
    let fragment= document.createRange().createContextualFragment(str);
    //do what you need to do here like for exemple
    fragment.getElementById('test').innerHtml = "myHtmlTest";
    //then return a string of the modified html
    const serializer = new XMLSerializer();
    return serializer.serializeToString(element)
}