js正则 - 匹配源代码中的链接

2008-12-10 12:54:06 | 【

JavaScript正则表达式匹配html源代码中的所有链接

/<a\s(\s*\w*?=".+?")*(\s*href=".+?")(\s*\w*?=".+?")*\s*>[\s\S]*?<\/a>/ 


思路如下:首先要有<a和一个空格。/<a\s/

第一个(\s*\w*?=".+?")*

可以匹配一个属性,属性前面可能有或者没有多余的空格,用\s*匹配;属性名肯定是单词字符,用\w*?匹配;=".+?"就是匹配属性值了非换行字符若干个;整个括号外面加个*表示可能有任意多个属性。

(\s*href=".+?")

匹配href,它也是一个属性,所以只要把上面子正则表达式中的\w修改为href=就行了。

(\s*\w*?=".+?")*重复第一个子正则表达式,再次接受任意个属性。

\s*>,属性最后再加上若干个空格和>。

[\s\S]*?,链接的文字,可能有任何字符组成,若干个,非贪婪。

<\/a>最后是结束标签。

补充:属性名和=之间,以及=和属性值之间也可能有空格。所以要再加上几个\s*。

最后的实例代码如下:

<script type="text/javascript"> 
 function findLinks(str){ 
  var reg = /<a\s(\s*\w*?\s*=\s*".+?")*(\s*href\s*=\s*".+?")(\s*\w*?\s*=\s*".+?") *\s*>[\s\S]*?<\/a>/g; 
  var arr = str.match(reg); 
  for(var i=0;i<arr.length;i++){ 
  document.write('link:'+arr[i]+'<br />'); 
  } 
 } 
 var str = '<p>测试链接:<a id = "test" href="http://sharejs.com" title="sharejs">分享JavaScript </a></p><a? href = "http://www.sharejs.com/"? >sharejs</a>'; 
 var arr = findLinks(str); 
 </script>


会把所有的链接在页面直接显示出来。注意,

本帖遗留问题:如何执行从右到左的匹配。貌似JS或者VBS没有提供这个功能2、JS或者VBS不支持 后行断言。。用什么方法实现这个功能。

相关资源