JS正则匹配过滤字符串中的html标签及html标签内的内容
一、匹配html标签,但不匹配html标签里的内容(简单粗暴,直接上正则。前面三种不是我所需要的,后面reg4过滤单标签的,可以需要)var reg =/<[^>]+>/gi;//匹配所有的html标签。但不包括html标签内的内容var reg2 = /<(?!img).*?>/gi;//匹配除img标签外的html标签不包括html标签内的内容var reg3 =
·
一、匹配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标签内的内容
再分析上面的两个匹配:
普通匹配,可以匹配到单标签和双标签,但是嵌套标签,这就问题大了,看下面截图
分组匹配,只能匹配双标签,但是嵌套标签,有点小问题,但可以接受,可以用循环来匹配,看下面截图
更多推荐
已为社区贡献3条内容
所有评论(0)