html-to-whatsapp
Version:
This is a package which will convert html into whatsapp text.
101 lines (79 loc) • 4.46 kB
JavaScript
async function removeTagsFromMessages(originalString) {
let convertedMessageText = convertHTML(removeEmptyTags(originalString));
return convertedMessageText;
}
function convertHTML(htmlString) {
let result = htmlString.replace(/ /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(/&/g, '&').replaceAll(/</g, '<').replaceAll(/>/g, '>')
return result;
}
function removeEmptyTags(htmlString) {
const emptyTagRegex = /<([a-z]+)[^>]*>(?:\s*| )*?<\/\1>/gi;
return htmlString.replace(emptyTagRegex, '');
}
module.exports = removeTagsFromMessages;