js正则 - 用正则获得指定标签的内容

2008-12-11 00:02:22 | 【

JavaScript正则表达式获取指定标签内的内容

有如下代码:

 

<channel>
   <title>分享JavaScript</title>
 </channel>
 <item>
   <title>JavaScript程序设计规范</title>
 </item>
 <item>
     <title>《古典写实美女》漫画教程</title>
 </item>
 <item>
     <title>安远――消失的光年</title>
 </item>
 <item>
     <title>JavaScript入门</title>
 </item>


要求匹配item里的title而不匹配channel里的title。

基本正则:

 /<title>[\s\S]*?<\/title>/gi 

首先是title标签,内容为任意字符若干个,然后是title结束标签。这个正则已经能匹配到所有的title标签。

首先,我简单地修改了一下原正则:

 /<title>[^<>]*?<\/title>/gi,

因为title里面不应该再嵌有其它标签,这个正则同样是匹配所有标题的内容,最后再加上不去匹配channel中的title。整个正则如下:

 /<title>[^<>]*?<\/title>(?!\s*<\/channel>)/gi (?!\s*<\/channel>)


表示要匹配字符串的后面不能跟着若干个空格和一个channel的结束标签。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>正则表达式 - sharejs.com</title>
<style type="text/css">
label {display:block; margin:0 0 6px;}
</style>
<script type="text/javascript">
function $(id){
	return document.getElementById(id);
}
var reg=[];
reg[reg.length]=/cat/gi;
function showresult(){
  var con = $('t1').value;
  var t;
  var p = [];
  var reg = /<item>\s*<title>(.*)?<\/title>\s*<\/item>/igm;
  while((t=reg.exec(con))!=null){
    p.push(t[1]);
  }
  $("result").value=p.join('\n');
}
</script>
</head>
<body>
<form name="varchar" action="">
<p>
  <label>字符串</label>

<textarea name="t1" cols="120" rows="15">

<channel>
   <title>分享JavaScript</title>
 </channel>
 <item>
   <title>JavaScript程序设计规范</title>
 </item>
 <item>
     <title>《古典写实美女》漫画教程</title>
 </item>
 <item>
     <title>安远――消失的光年</title>
 </item>
 <item>
     <title>JavaScript入门</title>
 </item>

</textarea>
</p>
<p><input type="button"  value="测试" onclick="showresult()" />
</p>
<p><label>匹配结果:</label><textarea id="result" cols="120" rows="15"></textarea></p>
</form>
</body>
</html>

相关资源