import 'package:html/parser.dart' show parse; class Em { static final _exp = RegExp('<[^>]*>([^<]*)]*>'); static String regCate(String origin) { Iterable matches = _exp.allMatches(origin); return matches.lastOrNull?.group(1) ?? origin; } static List> regTitle(String origin) { List> res = []; origin.splitMapJoin( _exp, onMatch: (Match match) { String matchStr = match[0]!; res.add({'type': 'em', 'text': regCate(matchStr)}); return matchStr; }, onNonMatch: (String str) { if (str != '') { str = decodeHtmlEntities(str); res.add({'type': 'text', 'text': str}); } return str; }, ); return res; } static String decodeHtmlEntities(String title) { return parse(title).body?.text ?? title; } }