请教一个正则:匹配含有某个字符串的标签

wayne23 2012-04-20 11:54:27
假如有一段HTML是:


<P ALIGN="LEFT">
<FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">
<B>以高效能电池技术应对光伏市场变动,这样是否是一个可行的方案?</B>
<FONT COLOR="#666666">[老胡 2012-4-16 10:50]</FONT>
<FONT COLOR="#0000FF">
<A HREF="event:0" TARGET=""><U>文本答疑</U></A>
</FONT>
</FONT>
</P>

<P ALIGN="LEFT">
<FONT FACE="Times New Roman" SIZE="12" COLOR="#D75509" LETTERSPACING="0" KERNING="0">
<B>可能星期五,我也不太确定</B>
</FONT>
</P>

<P ALIGN="LEFT">
<FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0"> 
<B>请问是东汉末年分出的三国吗?</B>
<FONT COLOR="#666666">[三国迷 2012-4-17 18:01]</FONT>
<FONT COLOR="#0000FF">
<A HREF="event:1" TARGET=""><U>文本答疑</U></A>
</FONT>
</FONT>
</P>

<P ALIGN="LEFT">
<FONT FACE="Times New Roman" SIZE="12" COLOR="#D75509" LETTERSPACING="0" KERNING="0">
<B>恭喜你答对了!</B>
</FONT>
</P>


这是整理后是这样,以方便大家看。实际的文本就是一整串字符串连在一起。

我的想法是,里面有很多个<p>...</p>,其中有的p标签里含有一个<A HREF="event:数字"...,我要根据传入的数字,找到这个(event:+数字)字符串所属的直系p,并将这个p里面的(<B>XXXXX</B>)通过分组取出来

打个比方说:

参数为1,那么我根据一段正则, ...event:1... 去查找到

<P ALIGN="LEFT">
<FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0"> 
<B>请问是东汉末年分出的三国吗?</B>
<FONT COLOR="#666666">[三国迷 2012-4-17 18:01]</FONT>
<FONT COLOR="#0000FF">
<A HREF="event:1" TARGET=""><U>文本答疑</U></A>
</FONT>
</FONT>
</P>

然后提取出这个P里面唯一的:

<B>请问是东汉末年分出的三国吗?</B>

然后得到最终的字符串:

请问是东汉末年分出的三国吗?


最终取出来的希望是这样的分组:

$0 对应的P标签全部内容
$1 请问是东汉末年分出的三国吗?

(第一组返回该条件字符串所属的<p>标签内容,第二组返回里面<b>标签里的文本内容)

不知道描述的够不够清楚,请大家给予帮助,万分感谢!
...全文
199 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hch126163 2012-04-20
  • 打赏
  • 举报
回复
<P.+?>[\d\D]+?<B>(.+?)</B>[\d\D]+?<A HREF="event:\d+"[\d\D]+?</p>
挨踢直男 2012-04-20
  • 打赏
  • 举报
回复
<!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>
<title>无标题页</title>
</head>
<body>
<div id='d'>
<P ALIGN="LEFT">
<FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0"> 
<B>请问是东汉末年分出的三国吗?</B>
<FONT COLOR="#666666">[三国迷 2012-4-17 18:01]</FONT>
<FONT COLOR="#0000FF">
<A HREF="event:1" TARGET=""><U>文本答疑</U></A>
</FONT>
</FONT>
</P>
</div>
<script>

var regex = /<p([\s\S](?!<\/p>))+?<b>(([\s\S](?!<\/p>))+?)<\/b>([\s\S](?!<\/p>))+?href="event:1"([\s\S](?!<\/p>))+[\s\S]<\/p>/i
var html = document.getElementById('d').innerHTML;
var mc = html.match(regex);
alert(mc[2])
</script>
</body>
</html>

wayne23 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
<P.+?>[\d\D]+?<B>(.+?)</B>[\d\D]+?<A HREF="event:\d+"[\d\D]+?</p>
[/Quote]

大哥,我用你的试了下,当我用event:1来匹配,
<P.+?>[\d\D]+?<B>(.+?)</B>[\d\D]+?<A HREF="event:1+"[\d\D]+?</p>
结果把前3个<p>的内容都返回了。。我只需要返回event:1对应的那个<p>
你帮忙看看呢

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧