如何使用JavaScript移除DOCTYPE声明中双引号包裹的冗余子串
问题原因
- JavaScript的
String.replace()方法是纯函数,不会修改原始字符串,只会返回替换完成的新字符串,你没有将返回值重新赋值给变量,所以两次打印的都是原始值。 - 你写的匹配参数存在语法错误:混合了字符串和正则字面量写法,双引号转义逻辑错误,导致匹配规则不合法,根本无法匹配到目标内容。
解决方案
方案1:固定内容精准替换
如果要删除的内容是固定的,直接使用字符串匹配即可:
const data = `"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html></html>"`; // 接收replace返回的新字符串赋值 const processedData = data.replace(' PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"', ''); console.log(processedData); // 输出结果:"<!DOCTYPE HTML><html></html>"
方案2:正则通用匹配
如果需要适配不同版本的DOCTYPE PUBLIC声明,使用正则匹配更灵活:
const processedData = data.replace(/ PUBLIC "[^"]+" "[^"]+"/, '');
内容的提问来源于stack exchange,提问作者Amaarockz
相关产品推荐
相关产品推荐

