以下是用JAVASCRIPT+HTML写的一个正则表达式的练习器,帮助大家共同学习正则表达式,以下代码可能存在BUG,比如正则表达式的判断没有做异常处理,这还需要大家的共同改进,谢谢指点!

<!-----------------------------------------------------------------
// 档案名称:RegExp.htm
// 原创作者:青峰
// 作者邮件:
150343747@qq.com
// 创建日期:星期三,2006年08月09日 17:50:42
// 版权所有(C)青峰工作室
//---------------------------------------------------------------->

<HTML>
<HEAD>
 <Title>正则表达式练习器</Title>
 <META http-equiv="Content-Type" content="text/html; charset=gb2312">
 <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:150343747@qq.com>150343747@qq.com</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;">08-09-2006 08/09/2006 150343747@qq.com 12345 196.168.1.1 www.sohu.com ftp://www.china.com 2001.9.11 http://www.wwwjj.com.cn/club/bbs/bbsView.asp http://www.163.com/inden.htmhttp://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.检查日期:
([0-1]?[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>

只有注册用户登录后才能发表评论。

posts - 7, comments - 5, trackbacks - 0, articles - 4

Copyright © 【青峰小寨】