So in etwa, ja. Wesentlich schwieriger fand ich halt die Frage nach der Konkatenation, daher die etwas flapsige Formulierung. ;-)
Schwierig ist eher das Aufdröseln, wenn ich dich richtig verstehe.
Ungefähr so sollte es gehen:
* du hast ein Array mit einem Element(der gesammte Text) [{ text:"...", type: NORMAL_TEXT }]
* du filterst alle Kommentare und trennst jeweil vor und hinter diesen ab und erzeugst neue Einträge [{ text:"alles vor Kommentar 1", type: NORMAL_TEXT }, { text:"Kommentar 1", type: COMMENT }, { text:"alles nach Kommentar 1", type: NORMAL_TEXT }]
* über den abgetrennten text nach Kommentar 1 suchst du den nächsten, usw
* dann fängst du vorne wieder an und suchst in allen Einträgen vom Typ NORMAL_TEXT nach Schlüsselwörtern, trennst wieder ab und fügst weitere Einträge ein [{ text:"alles vor Schlüsselwort 1", type: NORMAL_TEXT }, [{ text:"Schlüsselwort 1", type: KEYWORD }, { text:"alles nach Schlüsselwort 1", type: NORMAL_TEXT }, { text:"Kommentar 1", type: COMMENT }, { text:"alles nach Kommentar 1", type: NORMAL_TEXT }]
* ...