尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
正则匹配嵌套标签内容思路
正则匹配嵌套标签内容百度找了几个嵌套正则都无法满足我的要求。示例字符串原使用正则#if.*?\/#if #if #if aaa /#if ccc /#ifbbb#ifddd/#if需要替换#if/#if标签内容为空最终效果应只保留bbb因为bbb没有被标签包含匹配思路使用单个标签匹配逐级替换内容后再重新匹配。主要判断在中间过程中不包含标签头的内容。不包含头就不需要判断标签尾。html应该标签类似同理可将子标签替换为{div1}、{div2}等形式需要恢复时再进行内容还原实现过程此方案虽然能够实现最终留下bbb但不支持#if中包含符号如12。不符合匹配思路 #if[^#if]*[^/#if]*/#if百度之后使用新写法参考地址https://blog.csdn.net/xiiii/article/details/89450341最终正则即在原匹配单个标签正则中增加不包含标签头的判断#if((?!#if).)*?\/#if \1代表第一个匹配内容这样单标签匹配只需要改头尾就行 (#if)((?!\1).)*?/#if参考示例代码let oldSqlCode #if #if aaa /#if ccc /#ifbbb#ifddd/#if; //2024.03.08 格式化之前注释不可识别内容 //需要注释最外层的#if标签 // console.log(oldSqlCode:,oldSqlCode) let newSqlCode oldSqlCode; let ifPattern /(#if)((?!\1).)*?\/#if/gim; let parentIndex 0; let tempIfs new Map(); let matches; while(ifPattern.test(newSqlCode)){//嵌套一次多循环一次保证#if标签正确替换为空 matches newSqlCode.match(ifPattern); // console.log(matches:,matches) parentIndex; for (let i 0; i matches.length; i) { let tempKey if-parentIndex-(i1); tempIfs.set(tempKey,matches[i]); newSqlCode newSqlCode.replaceAll(matches[i],tempKey);//替换if标签内容 } // console.log(newSqlCode:,newSqlCode) } // console.log(tempIfs:,tempIfs) //先按if-x-x格式替换为/*if-x-x*/注释格式后再还原内容 // let explanatory newSqlCode newSqlCode.replaceAll(/(if-\d-\d)/gim,/*\$1*/);//替换if标签内容 //if重复格式化会导致注释嵌套替换重复注释只保留一个 newSqlCode newSqlCode.replaceAll(/*/*,/*).replaceAll(*/*/,*/); // console.log(newSqlCode:,newSqlCode) //需要倒序遍历还原如if-2-1中会包含if-1-x // console.log(tempIfs.size-1) for (let i tempIfs.size-1; i 0; i--) { let key Array.from(tempIfs.keys())[i]; // console.log(key:,key) let val tempIfs.get(key); // console.log(key:val); //开始还原操作 newSqlCode newSqlCode.replaceAll(key,val);//替换if标签内容 } // console.log(最终注释结果newSqlCode:,newSqlCode) // 调用格式化控件将关键字转大写 newSqlCode format(newSqlCode,{language:dsType,uppercase: true}); newSqlCode newSqlCode.replaceAll({ reorder },\n/*{reorder}*/) .replaceAll(/where(\n.*)1\s*\s*1/gim, where 1 1\n) .replaceAll(\n\n,\n);// where 1 1 格式化调整
RELATED

相关推荐

基于PLC的校园照明控制系统设计与实践全解析

基于PLC的校园照明控制系统设计与实践全解析

又到毕业设计季,在众多电气自动化专业的选题里,"基于PLC的校园照明控制系统"绝对算得上经典中的经典。这个题目看着不难,但真正做起来却能串起一整套完整的技术链路:传感器信号采集、PLC点位分配、梯形图逻辑设计、电气…

📅 2026/10/10 8:04:35
CSP-J/S初赛1000页资料集高效使用指南:从知识模块到错题归因

CSP-J/S初赛1000页资料集高效使用指南:从知识模块到错题归因

简介:这份资料集面向备战NOIP CSP-J(入门级)与CSP-S(提高级)初赛第一轮的青少年选手及信奥教练,系统梳理了初赛所需的核心知识体系。内容围绕计算机结构与组成、进制转换、原反补码、操作系统与网络基础展开…

📅 2026/10/10 7:59:35
AI 代理技能模块实战:用自然语言生成可交互架构图

AI 代理技能模块实战:用自然语言生成可交互架构图

昨天在 GitHub 上刷到一个很有意思的仓库,名字叫 archify。项目定位很直白:给 AI 代理用的技能模块(skill module),让你用自然语言描述系统,AI 自动生成一张可以点击、缩放、带信息面板的可交互架构图。这个…

📅 2026/10/10 7:59:35
MORE NEWS

更多资讯

📰

UVa 11484题解:DOM背后的树模型与DFS序区间化操作

1. 题目拆解:UVa 11484 到底在考什么UVa 11484 这道题,标题叫 “Document Object Model”,猛一看以为是前端题,毕竟 DOM 是浏览器渲染的核心概念。但参加过 ACM 的老选手都知道,UVa 上的题目名字经常是“挂羊头卖狗肉”…

📰

端侧AI开发实战:从算力碎片化到工具链割裂的工程化拆解

1. 端侧AI到底卡在哪:从“跑得动”到“跑得好”的三道坎端侧AI这个词这两年热度一直没降过,但真正动手做过端侧部署的人都知道,把一个模型塞进手机、手表、车载盒子或者工业网关里跑起来,和让它跑得“能用”,中间隔着的…

📰

告别AI抽卡:用3D画布打造可控AI短片全流程

1. 从“抽卡”到“搭积木”:为什么我要折腾 3D 画布做 AI 短片做 AI 短片这一年多,我最深的感受就一个字:累。不是身体累,是心累。你肯定也经历过——坐在屏幕前,对着提示词框敲敲打打,改一个词&#xff0c…

📰

四款游戏横向对比:The Forest / Sons of the Forest / Green Hell(绿色地狱)/ SCUM(人渣)

四款游戏横向对比:The Forest / Sons of the Forest / Green Hell(绿色地狱)/ SCUM(人渣) 一句话总区分: The Forest:生存恐怖,强剧情,氛围压迫,难度中等&…

📰

基于arXiv API的计算机视觉论文每日自动抓取与筛选流水线

1. 这个每日更新项目到底在解决什么问题每天早上刷论文列表这件事,做过视觉研究的人应该都懂那种感受。arXiv 的 cs.CV 分区每天新挂出来的稿件少则几十篇,多的时候能到两三百篇,标题和摘要混在一起,光是滚动浏览就要花掉大半个小…

📰

潜水艇外流场六面体结构网格:block拓扑、O-grid与边界层全攻略

搞水下航行体CFD的人都知道,项目进度的瓶颈经常不在求解器,而在网格。尤其是全附体潜水艇模型的外流场计算,一个细长回转体上叠加上指挥台围壳、艉翼和舵,要在ICEM CFD里把六面体结构网格排布得“又漂亮又听话”,前期b…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬