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)))