正则表达式演武厅

废话少说直接亮招数

匹配img标签并同时捕获src的内容

(下面这完全是个反例)

/(?:<img(?:[^>="]*(?!src)[^>="]*="[^>"]*")* *src="([^>"]*)"[^>]*>)/gi

由于忘了非贪婪匹配,走了一大段弯路。费了一大堆时间。教训啊 !前面那部分看起来复杂,还用了负向零宽断言。实际上用一个[^>]+?就行了 

修改后如下 这次支持了" '引用参数 并且支持单双引号自动嵌套。代价是 返回结果中多了一个组。

/<img[^>]+?src=(['"])([^>\1]*)\1[^>]*>/gi

 


这个 可以拿到 img标签并捕获src中的内容
可以找个带图片的网页 用下面代码测试

var x,ct=0,hm=document.body.innerHTML;
var exp=/<img[^>]+?src=(['"])([^>\1]*)\1[^>]*>/gi;while(x=exp.exec(hm)){
ct++;
console.log(x[0].substring(0,100),'src=',x[1]);
}
console.log(ct+'>='+document.getElementsByTagName('img').length);

其实早就写出来了 ,遇到个蛋疼的情况所以一直以为写的不对 费了老半天劲。其实就是exec的执行上下文问题引起的=,=。

 不难发现 稍加修改 这个正则即可变成匹配oo标签并捕获其xx属性。当然如果是闭合标签的话想拿到完整标签就麻烦了,js纯正则也无法实现,这需要用到平衡组这种东西,这种强大玩意儿貌似只有.net支持。

posted @ 2013-02-01 17:17  Exolution  阅读(158)  评论(0编辑  收藏  举报