如何用JavaScript正则移除myxml中除开头外的<?xml和<gpx起始内容
处理XML字符串:保留首个XML声明与GPX标签,移除其余同类内容
直接用全局replace会把开头需要保留的内容也删掉,得拆分处理:先提取并保留开头的第一个<?xml version=声明和第一个<gpx标签,再对剩余内容批量移除同类标签。
JavaScript实现示例
function cleanXml(myxml) { // 匹配开头的XML声明(支持跨行) const xmlDecl = myxml.match(/^<\?xml version=[\s\S]+?\?>/); // 匹配XML声明后的第一个GPX标签 let gpxStart = null; let startOffset = 0; if (xmlDecl) { startOffset = xmlDecl[0].length; gpxStart = myxml.slice(startOffset).match(/^<gpx[\s\S]+?>/); } // 拼接需要保留的开头部分 let result = ''; if (xmlDecl) result += xmlDecl[0]; if (gpxStart) result += gpxStart[0]; // 处理剩余内容:移除所有XML声明和GPX开头标签 const remainingContent = myxml.slice(result.length); const processed = remainingContent .replace(/<\?xml version=[\s\S]+?\?>/g, '') .replace(/<gpx[\s\S]+?>/g, ''); return result + processed; }
Python实现示例
import re def clean_xml(myxml): # 匹配开头的XML声明(DOTALL让.匹配换行) xml_decl_match = re.match(r'^<\?xml version=.+?\?>', myxml, re.DOTALL) gpx_start_match = None offset = 0 if xml_decl_match: offset = len(xml_decl_match.group()) # 匹配XML声明后的第一个GPX标签 gpx_start_match = re.match(r'<gpx.+?>', myxml[offset:], re.DOTALL) # 组装保留的头部 cleaned_head = '' if xml_decl_match: cleaned_head += xml_decl_match.group() if gpx_start_match: cleaned_head += gpx_start_match.group() # 处理剩余内容,移除所有目标标签 remaining = myxml[len(cleaned_head):] processed_remaining = re.sub( r'<\?xml version=.+?\?>|<gpx.+?>', '', remaining, flags=re.DOTALL ) return cleaned_head + processed_remaining
核心逻辑说明
- 用
match(或正则开头锚定^)只捕获字符串最开头的目标内容,避免误删需要保留的部分 - 截取剩余内容后,用全局替换移除所有后续出现的
<?xml version=声明和<gpx开头标签 - 最后拼接保留的头部和处理后的剩余内容,得到最终结果
内容的提问来源于stack exchange,提问作者ADL92
相关产品推荐
相关产品推荐

