作者:北京馨香海棠 | 来源:互联网 | 2022-06-14 15:10
任何复杂的正则表达式都是由简单的子表达式组成的,要想写出复杂的正则来,一方面需要有化繁为简的功底,另外一方面,我们需要从正则引擎的角度去思考问题。关于正则引擎的原理,推荐《Mastering Regular Expression》中文名叫《精通正则表达式》。挺不错的一本书。
OK,先确定我们要解决的问题——从一段Html文本中找出特定id的标签的innerHTML。
这里面最大的难点就是,Html标签是支持嵌套的,怎么能够找到指定标签相对应的闭合标签呢?
我们可以这样想,先匹配最前面的起始标签,假设是div吧(
我之所以能够这样去思考,是因为我了解过正则的特性,我知道正则中的平衡组能够实现我刚才说的“堆栈”操作。所以,如果我们要编写复杂正则表达式,需要对正则的一些高级特性至少有所了解,这样我们思考问题才有个方向。
匹配任意闭合HTML标签的正则表达式:
<(&#63;[\w]+)[^>]*&#63;>((&#63;<\k[^>]*>)|\k>(&#63;<-Nested>)|.*&#63;)*\k>
如果只想匹配div标签,可以使用下面的正则表达式:
<(&#63;div)[^>]*&#63;>((&#63;<\k[^>]*>)|\k>(&#63;<-Nested>)|.*&#63;)*\k>
是的,你可以把div修改成任意你想要匹配的HTML标签
如果想同时匹配多个HTML标签,可以使用下面的正则表达式:
<(&#63;(div|span|h1))[^>]*&#63;>((&#63;<\k[^>]*>)|\k>(&#63;<-Nested>)|.*&#63;)*\k>
你还可以继续添加更多要匹配的标签
如果想匹配包含ID的标签,可以使用下面的正则表达式:
<(&#63;[\w]+)[^>]*\s[iI][dD]=(&#63;["']&#63;)footer(&#63;(Quote)\k)[^>]*&#63;(/>|>((&#63;<\k[^>]*>)|\k>(&#63;<-Nested>)|.*&#63;)*\k>)
这个正则匹配任意id为footer的HTML标签
小编补充:
正则 \k
你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(&#63;\w+)(或者把尖括号换成'也行:(&#63;'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k,所以上一个例子也可以写成这样:\b(&#63;\w+)\b\s+\k\b。
有,但是是跟<>配合用的,详见下面:
指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(&#63;\w+)(或者把尖括号换成'也行:(&#63;'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k,所以上一个例子也可以写成这样:\b(&#63;\w+)\b\s+\k\b。
到此这篇关于正则表达式匹配闭合HTML标签(支持嵌套)的文章就介绍到这了,更多相关闭合HTML标签内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
本文介绍了在 Android 开发中如何实现像素 (px)、缩放独立像素 (sp) 和密度独立像素 (dp) 之间的相互转换。这些方法对于确保应用在不同屏幕尺寸和分辨率上的适配至关重要。 ...
[详细]
蜡笔小新 2024-12-03 19:59:17
-
本文探讨了为何采用RESTful架构及其优势,特别是在现代Web应用开发中的重要性。通过前后端分离和统一接口设计,RESTful API能够提高开发效率,支持多种客户端,并简化维护。 ...
[详细]
蜡笔小新 2024-12-03 19:41:21
-
-
本文详细介绍了一种基于《权力的游戏》灵感,运用Adobe Illustrator创作独特家族图腾——牡鹿徽章的方法。本教程不仅展示了具体的步骤,还提供了多种技巧,帮助读者创作出既具个人特色又符合设计原则的作品。 ...
[详细]
蜡笔小新 2024-12-03 17:38:51
-
本文介绍了一个简单的Python函数,该函数能够接收一个日期作为输入,并返回这一天是星期几。此功能通过使用Python的datetime模块实现。 ...
[详细]
蜡笔小新 2024-12-03 17:26:40
-
本文探讨了通过HTML5的新特性,如内容可编辑性和本地存储功能,创建一个实用的网页便利贴。此项目不仅展示了HTML5的强大能力,还为开发者提供了实际应用这些技术的方法。 ...
[详细]
蜡笔小新 2024-12-03 16:54:50
-
在Backbone框架中,视图(View)的操作至关重要,包括模板渲染及事件处理等。为了提升代码的可读性和维护性,通常建议将界面根据功能拆分为多个视图。本文将探讨如何在父子视图间有效地传递值,并指出在实现过程中应注意的关键点。 ...
[详细]
蜡笔小新 2024-12-03 16:21:51
-
本文探讨了通过数组操作、事件委托、插件化开发、字符串拼接优化、HTML5 Data属性的使用、优先采用原生JavaScript以及JavaScript文件的压缩等方法,来提升jQuery应用程序的性能。 ...
[详细]
蜡笔小新 2024-12-03 16:00:54
-
本文探讨了Tomcat在启动过程中遇到的‘严重: Null组件’警告,并提供了解决此问题的方法,特别是当Tomcat使用的JRE版本低于应用所需版本时的处理方案。 ...
[详细]
蜡笔小新 2024-12-03 15:23:15
-
本文由Jogis撰写,详细探讨了React中的组件设计模式,包括控制组件、非控制组件及混合模型组件,分析了各自的优缺点及其应用场景。 ...
[详细]
蜡笔小新 2024-12-03 15:18:02
-
FastDFS是一款高效、简洁的分布式文件系统,广泛应用于互联网应用中,用于处理大量用户上传的文件,如图片、视频等。本文探讨了FastDFS的设计理念及其如何通过独特的架构设计提高性能和可靠性。 ...
[详细]
蜡笔小新 2024-12-03 14:42:56
-
本文详细介绍了如何在VMware环境下安装CentOS 7 Minimal,并成功配置GNOME桌面环境的过程。包括解决网络连接问题和设置默认图形界面等关键步骤。 ...
[详细]
蜡笔小新 2024-12-03 14:29:40
-
首先说一下,这是我在CSDN上的第一个文章,其实这个账号早在几年前就申请了,不过当时只是为了下载一个资源,而且也不怎么懂信息技术相关的领域,后来就再也没怎么动过,直到今天我才开始使用这个账号 ...
[详细]
蜡笔小新 2024-12-03 14:21:34
-
学习目的:1.了解android线程的使用2.了解主线程与子线程区别3.解析异步处理机制主线程与子线程:所谓主线程,在Windows窗体应用程序中一般指UI线程,这个是程序启动的时 ...
[详细]
蜡笔小新 2024-12-03 14:08:56
-
本文介绍了如何在 Framework7 中通过 AJAX 技术动态加载页面内容,确保用户在点击导航链接时能够顺利加载目标页面。 ...
[详细]
蜡笔小新 2024-12-03 13:52:06
-
本文针对公司项目中普遍存在的IE浏览器兼容性问题,特别是IE9及以下版本,提出了具体的解决方案,确保用户在这些旧版浏览器中也能顺利实现图片上传预览功能。 ...
[详细]
蜡笔小新 2024-12-03 13:29:12
-