[转载] 正则表达式练习器

原创 2005年05月28日 12:42:00
正则表达式的用途很广泛,但要熟练掌握就不是一件容易的事情了。
*********将以下代码复制到 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.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])[-./](/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>


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

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

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

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[i],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] = "$"+i+":"+matchArray[i]
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)
}


正则表达式练习器

正则表达式练习器 正则表达式的用途很广泛,但要熟练掌握就不是一件容易的事情了。为此,我编写了这个练...
  • paoluo
  • paoluo
  • 2006年04月07日 09:38
  • 736

正则表达式练习器

  网上学习正则表达式的程序很多功能也不错,但唯一的的不足是没有保存表达式的功能.所以我就写了这个东西,为了满足自己的需求.  由于时间紧在这个版本中的某些功能还不是很完善,但不影响学习使用.如果你有...
  • gu_fan
  • gu_fan
  • 2005年08月07日 16:16
  • 742

对正则表达式练习器的改进

对正则表达式练习器的改进,原贴ID901680 覆盖原execIt函数 修改后的execIt函数允许对多个正则表达式进行匹配(每个正则表达式一行),并对每一个匹配成分显示出是第几个正则表达式匹配的...
  • tbmqzmavp
  • tbmqzmavp
  • 2014年05月11日 20:59
  • 403

一键转载CSDN博客

前言  将喜欢的博客进行转载是对博客的收藏,也能够在以后不断的提高自己,而CSDN并没有一键转载功能,现在提供一种方法方便大家进行转载。实现   我们首先打开要转载的博客,然后鼠标右键就会出现下面的菜...
  • kevinelstri
  • kevinelstri
  • 2017年03月09日 13:38
  • 573

如何转载CSDN博客

小弟我刚大学毕业,正在找工作,在家等面试的时候就想着看点什么。面试的时候,什么都问你。如果有问题把你问住了,那基本就完了。**,out。 刚看了几篇郭霖大神的几篇博客,就像转载下来,以后自己留着看。结...
  • ppiglets
  • ppiglets
  • 2016年06月27日 15:40
  • 985

用java写的正则表达式练习器.

  可能有人会说现在网上到处都是正则表达式的练习器,我也见过不少,有用html和javascript写的hta应用程序的,也有用C#写的,但是这个用java写的练习器当然是与java有关的哦.里面肯定...
  • hoverlees
  • hoverlees
  • 2007年05月14日 23:51
  • 1296

csdn如何转载博客

1、找到要转载的文章,用chrome浏览器打开,右键选择审查元素 2、在chrome中下方的框里找到对应的内容,html脚本中找到对应的节点,选中节点,网页上被选中内容会被高亮显示,然后右键菜单选中...
  • sddxqlrjxr
  • sddxqlrjxr
  • 2015年11月15日 19:12
  • 3001

CSDN如何转载他人文章

利用Markdown可以解析html的特点,我们可以很方便的转载他人的文章。
  • Michael753951
  • Michael753951
  • 2017年04月21日 04:01
  • 531

如何从CSDN上转载文章

1.看到自己喜欢的文章,鼠标右键 2.选择装载文章的部分: 注:为什么选择HTML里面,是因为我们读者要读,文章就需要写出来,所以选这Input的意识 3.登录自己的CSDN博客: 4.尊重原...
  • csdnZCjava
  • csdnZCjava
  • 2017年07月07日 22:20
  • 317

CSDN的博文如何转载

最近发现CSDN的博客,是不能够转载的(或者说根本就没有转载连接;但是可以分享连接的,也只能分享微qq,人人,sina微博等非csdn博文)—— 最后在csdn官网上查看到,原来csdn是本着尊重原创...
  • u010700335
  • u010700335
  • 2014年05月28日 17:55
  • 2075
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[转载] 正则表达式练习器
举报原因:
原因补充:

(最多只允许输入30个字)