如何在Google App Script中将HTML字符串转换为无标签纯文本
原脚本存在的问题
- 依赖
XmlService.parse()的严格XML校验,无法兼容普通HTML。该方法要求输入内容是完全符合XML规范的标记,遇到未闭合标签(如<img>、<input>)、标签大小写不匹配、属性值包含特殊字符的场景都会直接解析失败,而日常使用的HTML大多不满足严格XML要求。 - 对
<br>的处理逻辑错误。原脚本直接将<br>替换为空,会导致原本用换行分隔的内容直接拼接在一起,丢失原本的排版逻辑。 - 解析逻辑冗余且易出错。使用
XmlService.getPrettyFormat()格式化后再用正则移除标签,不仅会引入不必要的空白字符,正则/<[^>]*>/本身存在缺陷,遇到属性值包含>的标签(如<div title="1>2">)会出现匹配错误,导致内容被截断。 - 没有处理HTML转义字符。原脚本无法识别
、<、&这类HTML转义实体,会原样输出转义编码,不符合纯文本的展示要求。
修正后的可用脚本
function toStringFromHtml(html) { // 使用HtmlService容错解析HTML,无需符合严格XML规范 const htmlOutput = HtmlService.createHtmlOutput(html); return htmlOutput.getContent() // 提前将换行、块级闭合标签替换为换行符,保留原排版逻辑 .replace(/<br[^>]*>/gi, '\n') .replace(/<\/(p|div|li|h[1-6])[^>]*>/gi, '\n') // 移除所有剩余HTML标签 .replace(/<[^>]*>/g, '') // 补充处理剩余转义空格 .replace(/ /g, ' ') // 合并多余空行、去除首尾空白 .replace(/\n\s*\n/g, '\n') .trim(); }
内容的提问来源于stack exchange,提问作者Nadila
相关产品推荐
相关产品推荐

