统计代码行数
,
只需一个正则就
搞定。嵌套
Html
标签的匹配是正则表达式应用中一个比较难的话题,因为它涉
及到的正则语法比较多,也比较难。因此也就更有研究的价值。
思路
任何复杂的正则表达式都是由简单的子表达式组成的,要想写出复杂的正则来,
一方面需要有化繁为简的功底,
另外一方面,
我们需要从正则引擎的角度去思考
问题。关于正则引擎的原理,推荐《
Mastering
Regular
Expression
》中文名叫
《精通正则表达式》。挺不错的一本书。
OK
,先确定我们要解决的问题——
从一段
Html
文本中找出特定
id
的标签的
innerHTML
。
这里面最大的难点就是,
Html
标签是支持嵌套的,怎么能够找到指定标签相对
应的闭合标签呢?
我们可以这样想,
先匹配最前面的起始标签,假设是
div
吧(
),接着一
旦遇到嵌套
div
,
就“压入堆栈”,
后面如果遇到
div
闭合标签了,
就“弹出堆
栈”。如果遇到闭合标签的时候,堆栈里面已经没有东西了,那么匹配结束,
此结束标签为正确的闭合标签
。
我之所以能够这样去思考,
是因为我了解过正则的特性,
我知道正则中的平衡组
能够实现我刚才说的“堆栈”操作。
所以,
如果我们要编写复杂正则表达式,
需
要对正则的一些高级特性至少有所了解,这样我们思考问题才有个方向。
实现
这里假设我们要匹配的文本是一段合法的
Html
文本。
下面这段
Html
代码是从我
的博客上拷贝下来的,
作为我们的测试文本。
我们要匹配的就是
footer
这个
div
的
innerHTML
,同时把标签名也捕获下来。
id="gotop"
href="#"
οnclick="MGJS.goTop();return
false;">Top
WordPress
Copyright©
简单生活
——
KevinYang
的博客