一、匹配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标签内的内容
再分析上面的两个匹配:

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐