import Foundation import UIKit import SwiftSoup public extension String { var isNotEmpty: Bool { !isEmpty } var htmlStripped: String { do { let pRegex = try Regex("

") let iRegex = try Regex(#"\(.*?)\<\/i\>"#) let codeRegex = try Regex(#"\\(.*?)\<\/code\>\<\/pre\>"#) .dotMatchesNewlines(true) let linkRegex = try Regex(#"\.*?\<\/a\>"#) let res = try Entities.unescape(self) .replacing(pRegex, with: { match in "\n" }) .replacing(iRegex, with: { match in if let m = match[1].substring { let matchedStr = String(m) return "**\(matchedStr)**" } return String() }) .replacing(linkRegex, with: { match in if let m = match[1].substring { let matchedStr = String(m) return matchedStr } return String() }) .withExtraLineBreak .replacing(codeRegex, with: { match in if let m = match[1].substring { let matchedStr = String(m) return "```" + String(matchedStr.replacing("\n\n", with: "``` \n ``` \n").dropLast(1)) + "```" } return String() }) return res } catch { return error.localizedDescription } } func toJSON() -> Any? { guard let data = self.data(using: .utf8, allowLossyConversion: false) else { return nil } return try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) } private var withExtraLineBreak: String { if isEmpty { return self } let range = startIndex..