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>


