频道直达 - 学院 - 下载 - 交易 - 特效 - 字库 - 手册 -排名-工具- 繁體
网页教学网站开发 设为首页
加入收藏
联系我们
建站搜索: 常用广告代码   用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发设计技术教程 -> asp教程 -> 正则表达式练习器

正则表达式练习器

作者:未知  来源:转载  发布时间:2005-7-20 11:43:19  发布人:acx

减小字体 增大字体

    正则表达式的用途很广泛,但要熟练掌握就不是一件容易的事情了。为此,我编写了这个练习器用来帮助学习。
    请多指教!

*********将以下代码复制到 RegExp.htm 即可 **********
<HTML>
<HEAD>
<TITLE>正则表达式练习器</TITLE>
<meta name = 安徽 池州 统计局 徐祖宁 e-mail:czjsz@stats.gov.cn>
<s cript language="Javas cript">
function OnMove() {
window.status = "("+window.event.clientX+","+window.event.clientY+")" + " :: "+document.location
}
</s cript>

<s cript LANGUAGE="Javas cript1.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+":"+matchArray
      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("rn")
  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
</s cript>

</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.cn
asdff 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])[-./](dddd))
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>
<s cript>
setregexp(1)
</s cript>
</BODY>
</HTML>


对正则表达式练习器的改进,原贴ID901680

覆盖原execIt函数
修改后的execIt函数允许对多个正则表达式进行匹配(每个正则表达式一行),并对每一个匹配成分显示出是第几个正则表达式匹配的。
这可视为语法分析的雏形,只要对匹配产生相应的动作。

function execIt(form) {
  var mode
  if(form.chkmode.checked) mode = "gi"
  else mode = "g"
  var regexpArray = form.regexp.value.split("rn")  //获取正则表达式到数组

  if(nextpoint == 0) form.reglist.value = ""
  var key = true
  if(form.scankmode.checked) key = false
  else nextpoint = 0
  do {
    var offs = 9999999999
    var pos = -1
    var input = form.main.value.substr(nextpoint)
    //对每个正则表达式进行匹配
    for(var i=0;i<regexpArray.length;i++) {
      re.compile(regexpArray,mode)
      var matchArray = re.exec(input)
      if(matchArray) {
        if(offs > matchArray.index) {
          offs = matchArray.index
          pos = i  //保存距离起始位子最近的匹配
        }
      }
    }
    if(pos>=0) {
      re.compile(regexpArray[pos],mode)
      var matchArray = re.exec(input)
      for(var i=1;i<matchArray.length;i++)
        matchArray = "$"+i+":"+matchArray
      form.reglist.value = "["+(pos+1)+"]"+(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)
}

       

将本文收藏到QQ书签与更多好友分享
[打 印]
[] [返回上一页] [收 藏]
上一篇文章:17种正则表达式
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 要10G免费网络硬盘的请进..
· 通过google 赶快来赚美金..
· 注册码大全十
· 头像-qq头像(qq新头像)4..
· 让你轻松架设FTP服务器1..
· 注册码大全三
· 梦幻背景图片7
· 卡通动物图片6
· 网页制作素材-按钮素材2..
· 让你轻松架设FTP服务器5..
· 风景图片8
· 注册码大全九
· 让你轻松架设FTP服务器2..
关注此文读者还看过
· 调查显示:89.9%的人认为..
· 金山CEO雷军致员工上市公..
· Photoshop为图像打造一简..
· 平面软件 Photoshop 发展..
· 体验PS CS2增强的图像处..
· ASP.NET创建XML Web服务..
· Photoshop快速将照片转为..
· 用asp.net编写的上传程序..
· ASP实现网页打开任何类型..
· 在ADO使用SELECT语法六
· 九成网友愿为网恋埋单
· 7家网站涉嫌销售侵权影视..
· 设计理论设计中的层次感..
· ASP中一个字符串处理类加..
· PHP新手上路(一)
· PHP中上传大体积文件时需..
相关文章
· javascript正则表达式的常用..
· ASP技巧:用isapi_re..
· 解析正则表达式
· C#正则表达式应用范例
· 利用正则表达式把用URLEnco..
· 不用正则表达式来实现非大小..
· 正则表达式使用详解(二)
· 正则表达式使用详解(一)
· 正则表达式语法
· 在ASP中利用“正则表达式”..
· 解析正则表达式(原创)
· 正则表达式中的特殊字符
· MySql正则表达式的描述
· 正则表达式简介(14)
· 正则表达式简介(13)
· 正则表达式简介(12)
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
粤ICP备05092265号