JSFiddle - React, Tailwind, and code Playground

by prozoroff

JavaScript

var testString = 'Lorem <br/>ipsum dolor sed do eiusmod tempor incididunt (<span style="font-size:12px">sit amet,</span>)  sed do eiusmod tempor incididunt';

function parseTextString(textStr) {
    var result = {rows: []},
        styleRegex = /<.*style="([^"]+)".*>/;

    var rows = textStr
        .replace(/<(b|strong)>/g, '<span style="font-weight:bold">')
        .replace(/<(i|em)>/g, '<span style="font-style:italic">')
        .replace(/<a/g, '<span')
        .replace(/<\/(b|strong|i|em|a)>/g, '</span>')
        .split(/<br.*?>/g);

    for (var i = 0; i < rows.length; i++) {
        var rowString = rows[i];
        if (rowString) {
            var row = parseRow(rowString);
            result.rows.push(row);
        }
    }

    return result;


    function parseRow(string) {
        var result = [],
            string = string.replace(/<span/g, '|||<span').replace(/<\/span>/g, '</span>|||'),
            spans = string.split('|||'),
            spansNumber = spans.length;

        for (var i = 0; i < spansNumber; i++) {
            var span = spans[i],
                spanStyle,
                spanText;
                


            if (styleRegex.test(span)) {
                spanStyle = span.match(styleRegex)[1].replace(/(;| |^)color([ :])/, '$1fill$2')
            }

            spanText = span.replace(/<(.|\n)*?>/g, '');

                result.push({
                    type: "text",
                    val: spanText,
                    style: spanStyle
                })
            }

        return result;
    }
}



alert(JSON.stringify(parseTextString(testString)))