正文

献丑啦--正则表达式练习器2006-05-24 16:31:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/Csharpsky/14787.html

分享到:

正则表达式的用途很广泛,但要熟练掌握就不是一件容易的事情了。为此,我编写了这个练习器用来帮助学习。    请多指教!*********将以下代码复制到 RegExp.htm 即可 **********<HTML><HEAD><TITLE>正则表达式练习器</TITLE><meta name = 安徽 池州 统计局 徐祖宁 e-mail:czjsz@stats.gov.cn><script language="JavaScript">function OnMove() {window.status = "("+window.event.clientX+","+window.event.clientY+")" + " :: "+document.location}</script><SCRIPT LANGUAGE="JavaScript1.2">var re = new RegExp()  //建立正则表达式对象var nextpoint = 0      //匹配时的偏移量//设置正则表达式function setPattern(form) {  var mode  if(form.chkmode.checked) mode = "gi"  //i:不分大小写 g:全局,好象没什么作用  else mode = "g"  re.compile(form.regexp.value,mode)  nextpoint = 0  form.reglist.value = ""}//检查是否有匹配function findIt(form) {  setPattern(form)  var input = form.main.value  if (input.search(re) != -1) {    form.output[0].checked = true      } else {    form.output[1].checked = true      }}//检查匹配位置function locateIt(form) {  setPattern(form)  var input = form.main.value  form.offset.value = input.search(re)}//检查所有的匹配情况function execIt(form) {  if(nextpoint == 0 || ! form.scankmode.checked) {    findIt(form)    form.reglist.value = ""  }  var key = true  if(form.scankmode.checked) key = false  do {    var input = form.main.value    var matchArray = re.exec(input.substr(nextpoint))    if(matchArray) {      for(var i=1;i<matchArray.length;i++)        matchArray[i] = "$"+i+":"+matchArray[i]      form.reglist.value = (nextpoint+matchArray.index)+" => " + matchArray[0] +"\n"+form.reglist.value      form.matchlist.value = "$0:"+matchArray.join("\n")      nextpoint = nextpoint + matchArray.index + matchArray[0].length    }else {      if(!key)        form.reglist.value = "没有找到\n" + form.reglist.value       form.matchlist.value = " "      nextpoint = 0      key = false    }  }while (key)}//设置当前使用的正则表达式function setregexp(n) {  var s = document.all.regexplist.value.split("\r\n")  document.all.regexp.value = s[n*2-1]  //.replace("\r","")  nextpoint = 0}//定义选择监视var isNav = (navigator.appName == "Netscape")function showSelection() {  if (isNav) {    var theText = document.getSelection()  } else {    var theText = document.selection.createRange().text  }  if(theText.length>0 && document.all.selechkmode.checked)    document.all.regexp.value = theText}if (isNav) {    document.captureEvents(Event.MOUSEUP)}document.onmouseup = showSelection</SCRIPT></HEAD><BODY style="font-size=9pt;" OnMouseMove=OnMove()><FORM><table width=100% cellspacing=0 cellpadding=0><tr><td><font color=red>正规表达式练习器</font></td><td align=right><a href=mailto:czjsz_ah@stats.gov.cn>czjsz_ah@stats.gov.cn</a></td></tr></table><table width=100% broder=1 frame=above rules=none style="font-size:9pt;"><tr><td width=50%  valign=top>输入一些被寻找的正文:<BR><TEXTAREA NAME="main" COLS=58 ROWS=5 WRAP="virtual" style="font-size:9pt;">09-11-2001 09/11/2001 czjsz_ah@stats.gov.cnasdff 12345 196.168.1.3 www.sohu.com ftp://www.chinaasp.com 2001.9.11 http://www.active.com.cn/club/bbs/bbsView.asp http://www.163.com/inden.htm</TEXTAREA><BR>进行匹配的正规表达式:  忽略大小写<INPUT TYPE="checkbox" NAME="chkmode" checked style="font-size:8pt;height:18px"><BR><TEXTAREA NAME="regexp" COLS=51 ROWS=5 style="font-size:9pt;"></TEXTAREA><INPUT TYPE="button" VALUE="清除" onClick="this.form.regexp.value=@#@#" style="font-size:8pt;height:18px"><BR><INPUT TYPE="button" VALUE="能找到吗?[regexObject.test(string)]" style="font-size:8pt;width:70%;height:18px" onClick="findIt(this.form)"><INPUT TYPE="radio" NAME="output" style="font-size:8pt;height:18px">Yes<INPUT TYPE="radio" NAME="output" style="font-size:8pt;height:18px">No <BR><INPUT TYPE="button" VALUE="在哪里?[string.search(regexObject)]" style="font-size:8pt;width:70%;height:18px" onClick="locateIt(this.form)"><INPUT TYPE="text" NAME="offset" SIZE=4 style="font-size:8pt;height:18px"></td><td valign=top>测试用正则表达式列表: 使用第<input type=text name=num size=2 value=1 style="font-size:8pt;height:18px">个<input type=button value=Go onClick=setregexp(this.form.num.value) style="font-size:8pt;height:18px">    允许复制<INPUT TYPE="checkbox" NAME="selechkmode" style="font-size:8pt;height:18px"><textarea NAME="regexplist" cols=58 rows=14 wrap=off style="font-size:9pt;">1.检查日期:(1[0-2]|0?[1-9])[-./](0?[1-9]|[12][0-9]|3[01])[-./](\d\d\d\d))2.检查数字:([-+]?[0-9]+\.?[0-9]+)3.检查URL:((http|ftp)://)?(((([\d]+\.)+){3}[\d]+(/[\w./]+)?)|([a-z]\w*((\.\w+)+){2,})([/][\w.~]*)*)4.检查E-mail\w+@((\w+[.]?)+)</textarea></td></tr><tr><td valign=bottom><INPUT TYPE="button" VALUE="有哪些?[regexObject.exec(string)]" style="font-size:8pt;width:70%;height:18px" onClick="execIt(this.form)">  单步<INPUT TYPE="checkbox" NAME="scankmode" style="font-size:8pt;height:18px"><BR><TEXTAREA NAME="reglist" COLS=58 ROWS=8 style="font-size:9pt;"></TEXTAREA></td><td valign=bottom>匹配到的成分:(单步时可见)<TEXTAREA NAME="matchlist" COLS=58 ROWS=8 style="font-size:9pt;"></TEXTAREA></td></tr></table></FORM><script>setregexp(1)</script></BODY></HTML>

阅读(3797) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册