js正则 - 正则判断标签是否闭合

2008-12-11 00:00:18 | 【

JavaScript正则表达式判断HTML标签是否闭合

例如:<img xxx=”xxx” 就是没有闭合的标签;

<p>p的内容,同样也是没闭合的标签。

从简单的正则开始,先匹配起始标签

 /<[a-z]+/i 


再加上若干属性:

 /<[a-z]+(\s*\w*?\s*=\s*".+?")*/i 


下面就到关键点了,标签的闭合。标签可能有两种方式闭合,<img xxx=”xxx” />

或者是<p>xxx </p>。

(\s*\/>)

匹配img类的结束,即/>。

(\s*?>[\s\S]*?<\/\1>) 


匹配\p类标签的结束标签。>是其实标签末尾,之后是标签内容若干个任意字符,最后的<\/\1>就是结束标签了。

加上一个或就可以解决了,最后的完整正则表达式:

整个正则:

/<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?<\/\1>|\s*\/>)/i 


拿这个正则,只要匹配到了就表示闭合,没匹配到则没有闭合。不过没有考虑相同标签嵌套的问题,例如

<div>aaaaaa<div>test</div> 


也被判断为合格,可以通过把最后的匹配p类结束标签写成子正则表达式,并且更改为非贪心,然后在匹配结果中检查是否成对。正则如下:

 /<([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?>[\s\S]*?(<\/\1>)+|\s*\/>)/i 

相关资源