JS正则匹配过滤字符串中的html标签及html标签内的内容

这篇博客探讨了如何使用正则表达式匹配HTML标签及其内容。主要关注如何区分单标签和双标签,以及处理嵌套标签的挑战。提供的正则表达式示例包括匹配特定标签、过滤单标签以及尝试通过分组匹配解决嵌套标签问题。虽然存在一些限制,但这些方法对于HTML内容的过滤和提取有一定的帮助。
摘要由CSDN通过智能技术生成

一、匹配html标签,但不匹配html标签里的内容(简单粗暴,直接上正则。前面三种不是我所需要的,后面reg4过滤单标签的,可以需要)

 var reg =  /<[^>]+>/gi;                  //匹配所有的html标签。但不包括html标签内的内容
 var reg2 = /<(?!img).*?>/gi;             //匹配除img标签外的html标签  不包括html标签内的内容
 var reg3 = /<(?!img|p|\/p).*?>/gi;       //匹配除img、p标签外的html标签  不包括html标签内的内容
 var reg4 = /<(img|br|hr|input)[^>]*>/gi;          //只匹配img、br、hr、input标签

二、匹配html标签里内容的正则,有两大难点

1、单标签和双标签的区别 例如

的区别

2、嵌套标签(超难,基本无解,若需要过滤的话,则可以通过分组匹配一直重复匹配来解决) 例如

外面的div
里面的div

思路:

先用下面的正则把所有的单标签去除:

var reg = /<(img|br|hr|input)[^>]*>/gi;

再上基本的正则匹配代码:
  /*
* 普通匹配 (但后面用不到,用不到的原因,可查看下面截图)
* 下面两个可以匹配
* 但是有个bug 嵌套标签的结构就不会被匹配到 例如这样的结构:

外面的div
里面的div

* 这也就是上面所说的嵌套标签的难点
* */

 var reg = /<div[^>]*>[^<]*<\/div>/gi;    //匹配所有的div标签。包括div标签内的内容
 var reg2 = /<[^>]*>[^<]*(<[^>]*>)?/gi;   //匹配所有的html标签,包括html标签内的内容
/*
* 使用分组匹配
* bug跟上面的一样     嵌套标签的结构就不会被匹配到      例如这样的结构: <div>外面的div<div>里面的div</div></div>
* 如果用在过滤上的话,可以重复过滤(不会少过滤掉一些本就在标签内的内容,也不会多过滤标签外的内容)。在过滤上看,分组匹配比上面的匹配靠谱多了。
* 但是,有个小问题,下面的分组匹配正则匹配不到单标签的,所以还需要用到上面的一般匹配。
* 双标签对应匹配
* */ 
   var reg3 = /<(div)[^>]*>[^<]*<\/(\1)>/gi;  //分组匹配   匹配所有的div标签,包括div标签内的内容
   var reg4 = /<(\S*)[^>]*>[^<]*<\/(\1)>/gi;   //分组匹配   匹配所有的html双标签,包括div标签内的内容
再分析上面的两个匹配:

普通匹配,可以匹配到单标签和双标签,但是嵌套标签,这就问题大了,看下面截图 
  在这里插入图片描述
 
分组匹配,只能匹配双标签,但是嵌套标签,有点小问题,但可以接受,可以用循环来匹配,看下面截图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值