CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

正则表达式匹配的问题

楼主TechnoFantasy((VB MVP)www.applevb.com)2006-06-01 17:39:12 在 Web 开发 / JavaScript 提问

字符串:<LOOP1     ChannelID=1111   Count=15   TitleLength=200>  
  <td><LOOP2   ChannelID=20390   Count=20   TitleLength=100>123456</Loop2></Loop1>  
  <LOOP1     ChannelID=2222   Count=16   TitleLength=300>  
  <td><LOOP2   ChannelID=20333   Count=20   TitleLength=100>654321</Loop2></Loop1>  
   
  其中有两个<LOOP1   ...></LOOP>,我想把两个都匹配出来,我现在用的正则式是:  
  (<loop1\s[^>]+>[\s\S]+</loop1>)  
   
  现在只匹配出一个来:  
  <LOOP1     ChannelID=1111   Count=15   TitleLength=200>  
  <td><LOOP2   ChannelID=20390   Count=20   TitleLength=100>123456</Loop2></Loop1>123  
  333<LOOP1     ChannelID=2222   Count=16   TitleLength=300>  
  <td><LOOP2   ChannelID=20333   Count=20   TitleLength=100>654321</Loop2></Loop1>  
   
  就是没有将两个LOOP1分出来,请问应该怎么处理? 问题点数:100、回复次数:11Top

1 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-06-01 18:36:10 得分 80

<textarea   name="textarea1">  
  :<LOOP1     ChannelID=1111   Count=15   TitleLength=200>  
  <td><LOOP2   ChannelID=20390   Count=20   TitleLength=100>123456</Loop2></Loop1>  
  <LOOP1     ChannelID=2222   Count=16   TitleLength=300>  
  <td><LOOP2   ChannelID=20333   Count=20   TitleLength=100>654321</Loop2></Loop1>  
  </textarea>  
  <script   language=javascript>  
  var   str=document.getElementById("textarea1").value  
  re=/<loop1\s[^>]+>([\s\S](?!(<loop1)))+<\/loop1>/ig  
  a=str.match(re)  
  for(var   i=0;i<a.length;i++)  
  {  
  alert(a[i])  
  }  
  </script>Top

2 楼moodboy1982(老鹰)回复于 2006-06-01 18:47:08 得分 0

http://www.esoftnow.com/bbs/dispbbs.asp?boardID=6&ID=72&page=1Top

3 楼meizz(梅花雪)回复于 2006-06-02 09:27:29 得分 20

用非贪婪式匹配:  
   
  <SCRIPT   LANGUAGE="JavaScript">  
  <!--  
  var   s   =   "<LOOP1     ChannelID=1111   Count=15   TitleLength=200><td><LOOP2   ChannelID=20390   Count=20   TitleLength=100>123456</Loop2></Loop1><LOOP1     ChannelID=2222   Count=16   TitleLength=300><td><LOOP2   ChannelID=20333   Count=20   TitleLength=100>654321</Loop2></Loop1>";  
  var   r   =   /<loop1\s[^>]+>[\s\S]+?<\/loop1>/gi;     //这个与你的正则只是多了一个   ?   而已  
  var   a   =   s.match(r);  
  alert(a[0]);  
  alert(a[1]);  
  //-->  
  </SCRIPT>Top

4 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-06-02 09:42:18 得分 0

学习,今天才终于知道为什么要是.+?了。Top

5 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2006-06-02 10:06:31 得分 0

8好意思,再问一下,为什么要多这个?呢?Top

6 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-06-02 10:28:07 得分 0

上面不是说了吗?  
  加了?号就是非贪婪模式,也叫做勉强模式,正则这个东西都很贪,.+的话是匹配尽可能多的字符,而在加上一个?就是匹配第一个可以匹配的字符Top

7 楼eglic(圪圪) (理由永远是谎言,信仰永远是自慰)回复于 2006-06-02 10:31:49 得分 0

哈哈,VB版的大牛,到这里也绿了~Top

8 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-06-02 10:32:14 得分 0

晕倒,原来是VB版的。:)Top

9 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-06-02 10:33:03 得分 0

hehe,还是被你先发现了,我也发现了。Top

10 楼mingxuan3000(铭轩)回复于 2006-06-02 10:42:13 得分 0

那个名字熟悉Top

11 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2006-06-02 10:48:02 得分 0

明白了,谢谢天外水火。给分。  
  还有梅花,MUA   一个~~~~~Top

相关问题

关键词

得分解答快速导航

  • 帖主:TechnoFantasy
  • hbhbhbhbhb1021
  • meizz

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo