JavaScript code snippets

Im Blog von Struppi bin ich über zwei JavaScript Code-Snippets gestolpert, die doch noch verbessert werden konnten.
Hier meine Varianten:

stripHTML entfernt alle HTML tags in einem String. Es nutzt dabei die non-greedy RegExp .*? und kommt im replacement-part ohne function aus.
Ausserdem erfasst es tag-deletion und „“-deletion in einem Rutsch und paart die Hochkommata korrekt. Ansonsten könnte <tag test="hallo'>foo<'"/> in die Hose gehen.
Zusätzlich habe ich noch html-Kommentare entfernt.

function stripHTML(str){
    return str.replace(/<[^!](?:[^>"']|"[^"]*"|'[^"]*')*>|<!--.*?-->/g,'');
};

Als Erweiterung könnte auch noch script code entfernt werden:

function stripHTML(str){
    return str.replace(/<script\b(?:[^>"']|"[^"]*"|'[^"]*')*>.*?<\/script\s*>
                        |<[^!](?:[^>"']|"[^"]*"|'[^"]*')*>|<!--.*?-->/g,'');
};

Für die Funktion trim schlage ich folgenden Einzeiler vor:

function trim(str) {
    return str.replace(/\s+/g, ' ').replace(/^ | $/g, '');
}

Das erste replace lässt alle Leerzeichen zusammenschrumpfen, geht dabei aber mit Zeilenumbrüchen behutsamer vor (Bei deiner Variante, kann es sein, dass das letzte Wort in einer Zeile und das erste in der nächsten miteinander verbunden werden.)
Das zweite replace entfernt ein eventuelles Leerzeichen am Anfang und Ende vom String.

Comments are closed.