正则:如何处理嵌套的HTML标签中的内容?

zhongmao 2007-07-26 11:47:19
我想用正则表达式处理html中的文本,因为处理的同时还要保证html标签,所以不能用innerText。
代码如下:
在处理嵌套的HTML时,这个正则匹配有问题,
如处理:<ul><li>列表中的Text</li></ul>时,match.SubMatches(2)是空。
而我需要得到的内容是“列表中的Text”或者“<li>列表中的Text</li>”

大家帮我看看,应该怎么修改这个正则。

<script type="text/vbscript">
<!--
p_template = "<aaa>自定义标签</aaa><ul>aa<li>列表中的Text</li>aa</ul><p><img src='http://wwwy1.asdfs.com' width='100px' height='50' />P中间IMG后面的 文字</p><a href='mailto:aa?subject=bb&body=cc'>这个是链接文字</a>链接后 的文字"
Set p_regexp = New RegExp
p_regexp.Global = True
p_regexp.Pattern = "<([a-z]+)(.*)>(.*)<\/\1>"
'While p_regexp.Test(p_template)
'MsgBox p_template
Set Matches = p_regexp.Execute(p_template)
For Each match in Matches
'If p_regexp.Test(p_template)

p_regexp.Pattern = match.Value
p_template = p_regexp.Replace(p_template, match.SubMatches(2))
MsgBox match.SubMatches(2)
Next
'Wend

MsgBox p_template
//-->
</script>
...全文
585 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinjuduo 2007-07-26
  • 打赏
  • 举报
回复
$3 <li>列表中的Text</li>
$4 列表中的Text
jinjuduo 2007-07-26
  • 打赏
  • 举报
回复
<textarea id="txt">
<aaa>自定义标签</aaa><ul>aa<li>列表中的Text</li>aa</ul><p><img src='http://wwwy1.asdfs.com' width='100px' height='50' />P中间IMG后面的 文字</p><a href='mailto:aa?subject=bb&body=cc'>这个是链接文字</a>链接后 的文字
</textarea>

<script language="vbScript" >

alert(test(txt.value))
function test(x)
dim re,mmm,m,i,str
set re = new RegExp
re.Global = true
re.IgnoreCase = true
re.Pattern = "<ul(.*?)>([^<]*?)(<.*?>([^<>]*)</.*?>)([^<]*?)</ul>"
set mmm = re.execute(x)
'alert mmm.count
for each m in mmm
str = str & re.replace(m,"$3")
str = str & re.replace(m,"$4")
next
test = str
end function
</script>
zhongmao 2007-07-26
  • 打赏
  • 举报
回复
littlelam(竹子岌)

你提供的表达式也不能正确匹配哦
littlelam 2007-07-26
  • 打赏
  • 举报
回复
"<([a-z]+)(.*)>([^<]*)<\/\1>"
zhongmao 2007-07-26
  • 打赏
  • 举报
回复
超链接中不出现*+还可能,但是要避免&基本上不可能,
应该有解决方法吧,
期待中
jinjuduo 2007-07-26
  • 打赏
  • 举报
回复
我刚才看了一下,是由于?在正则为特殊含义字符引起的,你把?替换为*+等都不能匹配,最好还是回避它,但是最终的原理我也没有弄清楚。
<script type="text/vbscript">
<!--
p_template = "<aaa >自定义标签</aaa><ul>aa<li>列表中的Text</li>aa</ul><p><img src='http://wwwy1.asdfs.com' width='100px' height='50' />P中间IMG后面的 文字</p><a href=''http://www.163.com/index.phpsubject=bb&body=cc'>这个是链接文字</a>链接后 的文字"
p_template=Replace(p_template,"?","")
Set p_regexp = New RegExp
p_regexp.Global = True
p_regexp.Pattern = "<([a-z]+)([^>]*)>(.*)<\/\1>"
'While p_regexp.Test(p_template)
'MsgBox p_template
Set Matches = p_regexp.Execute(p_template)
For Each match in Matches
'If p_regexp.Test(p_template)

p_regexp.Pattern = match.Value
p_template = p_regexp.Replace(p_template, match.SubMatches(2))
'MsgBox match.SubMatches(2)
Next
'Wend

MsgBox p_template
'MsgBox p_regexp.Test(p_template)
//-->
</script>
zhongmao 2007-07-26
  • 打赏
  • 举报
回复
谢谢jinjuduo()
受到你的提示,我把第二个匹配改成非贪婪的后,基本上达到我了的目的。
另外还有一个问题:
这个链接<a href='http://www.163.com/index.php?subject=bb&body=cc'>这个是链接文字</a>,当链接有?问号时,就匹配不上,这是为什么?


<script type="text/vbscript">
<!--
p_template = "<aaa>自定义标签</aaa><ul>aa<li>列表中的Text</li>aa</ul><p><img src='http://wwwy1.asdfs.com' width='100px' height='50' />P中间IMG后面的 文字</p><a href='http://www.163.com/index.php?subject=bb&body=cc'>这个是链接文字</a>链接后 的文字"
Set p_regexp = New RegExp
p_regexp.Global = True
p_regexp.Pattern = "<([a-z]+)(.*?)>(.*)<\/\1>"
'While p_regexp.Test(p_template)
'MsgBox p_template
Set Matches = p_regexp.Execute(p_template)
For Each match in Matches
'If p_regexp.Test(p_template)

p_regexp.Pattern = match.Value
p_template = p_regexp.Replace(p_template, match.SubMatches(2))
'MsgBox match.SubMatches(2)
Next
'Wend

MsgBox p_template
'MsgBox p_regexp.Test(p_template)
//-->
</script>

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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