Posted on 2006-08-20 23:55
【青峰小寨】 阅读(252)
评论(0) 编辑 收藏 引用 所属分类:
Java小记
以下是用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.htm
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.检查日期:
([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>