UNPKG

html-to-whatsapp

Version:

This is a package which will convert html into whatsapp text.

101 lines (79 loc) 4.46 kB
async function removeTagsFromMessages(originalString) { let convertedMessageText = convertHTML(removeEmptyTags(originalString)); return convertedMessageText; } function convertHTML(htmlString) { let result = htmlString.replace(/&nbsp;/g, ' '); result = result.replace(/<p>/g, '\n').replace(/<br>/g, '\n'); result = result.replace(/<strong>(.*?)<\/strong>/g, (match, content) => { const trail = content.match(/(\s+)$/); const trailSpace = trail ? trail[0]:' '; const forward = content.match(/^(\s+)/); const forwardSpace = forward ? forward[0]:' '; return (/^\s/.test(content) ? forwardSpace : '') + `*${content.trim()}*` + (/\s$/.test(content) ? trailSpace : ''); }); result = result.replace(/<em>(.*?)<\/em>/g, (match, content) => { const trail = content.match(/(\s+)$/); const trailSpace = trail ? trail[0]:' '; const forward = content.match(/^(\s+)/); const forwardSpace = forward ? forward[0]:' '; return (/^\s/.test(content) ? forwardSpace : '') + `_${content.trim()}_` + (/\s$/.test(content) ? trailSpace : ''); }); result = result.replace(/<span\s+[^>]*style="[^"]*\btext-decoration:\s*line-through;[^"]*"[^>]*>(.*?)<\/span>/g, (match, content) => { const trail = content.match(/(\s+)$/); const trailSpace = trail ? trail[0]:' '; const forward = content.match(/^(\s+)/); const forwardSpace = forward ? forward[0]:' '; return (/^\s/.test(content) ? forwardSpace : '') + `~${content.trim()}~` + (/\s$/.test(content) ? trailSpace : ''); }); result = result.replace(/_(.*?)_/g, (match, content) => { const trail = content.match(/(\s+)$/); const trailSpace = trail ? trail[0]:' '; const forward = content.match(/^(\s+)/); const forwardSpace = forward ? forward[0]:' '; return (/^\s/.test(content) ? forwardSpace : '') + `_${content.trim()}_` + (/\s$/.test(content) ? trailSpace : ''); }); result = result.replace(/\*(.*?)\*/g, (match, content) => { const trail = content.match(/(\s+)$/); const trailSpace = trail ? trail[0]:' '; const forward = content.match(/^(\s+)/); const forwardSpace = forward ? forward[0]:' '; return (/^\s/.test(content) ? forwardSpace : '') + `*${content.trim()}*` + (/\s$/.test(content) ? trailSpace : ''); }); result = result.replace(/~(.*?)~/g, (match, content) => { const trail = content.match(/(\s+)$/); const trailSpace = trail ? trail[0]:' '; const forward = content.match(/^(\s+)/); const forwardSpace = forward ? forward[0]:' '; return (/^\s/.test(content) ? forwardSpace : '') + `~${content.trim()}~` + (/\s$/.test(content) ? trailSpace : ''); }); result = result.replace(/_(.*?)_/g, (match, content) => { const trail = content.match(/(\s+)$/); const trailSpace = trail ? trail[0]:' '; const forward = content.match(/^(\s+)/); const forwardSpace = forward ? forward[0]:' '; return (/^\s/.test(content) ? forwardSpace : '') + `_${content.trim()}_` + (/\s$/.test(content) ? trailSpace : ''); }); result = result.replace(/\*(.*?)\*/g, (match, content) => { const trail = content.match(/(\s+)$/); const trailSpace = trail ? trail[0]:' '; const forward = content.match(/^(\s+)/); const forwardSpace = forward ? forward[0]:' '; return (/^\s/.test(content) ? forwardSpace : '') + `*${content.trim()}*` + (/\s$/.test(content) ? trailSpace : ''); }); result = result.replace(/~(.*?)~/g, (match, content) => { const trail = content.match(/(\s+)$/); const trailSpace = trail ? trail[0]:' '; const forward = content.match(/^(\s+)/); const forwardSpace = forward ? forward[0]:' '; return (/^\s/.test(content) ? forwardSpace : '') + `~${content.trim()}~` + (/\s$/.test(content) ? trailSpace : ''); }); result = result.replace(/<[^>]*>/g, ''); result = result.replaceAll(/&amp;/g, '&').replaceAll(/&lt;/g, '<').replaceAll(/&gt;/g, '>') return result; } function removeEmptyTags(htmlString) { const emptyTagRegex = /<([a-z]+)[^>]*>(?:\s*|&nbsp;)*?<\/\1>/gi; return htmlString.replace(emptyTagRegex, ''); } module.exports = removeTagsFromMessages;