手机
当前位置:查字典教程网 >编程开发 >正则表达式 >正则表达式练习器
正则表达式练习器
摘要:复制代码代码如下:正则表达式练习器functionOnMove(){window.status="("+window.event.clien...

复制代码 代码如下:

<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("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

</SCRIPT>

</HEAD>

<BODY 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>

<tr><td width=50% valign=top>

输入一些被寻找的正文:<BR>

<TEXTAREA NAME="main" COLS=58 ROWS=5 WRAP="virtual">

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><BR>

<TEXTAREA NAME="regexp" COLS=51 ROWS=5></TEXTAREA>

<INPUT TYPE="button" VALUE="清除"><BR>

<INPUT TYPE="button" VALUE="能找到吗?[regexObject.test(string)]">

<INPUT TYPE="radio" NAME="output">Yes

<INPUT TYPE="radio" NAME="output">No <BR>

<INPUT TYPE="button" VALUE="在哪里?[string.search(regexObject)]">

<INPUT TYPE="text" NAME="offset" SIZE=4>

</td>

<td valign=top>

测试用正则表达式列表:

使用第<input type=text name=num size=2 value=1>个<input type=button value=Go onClick=setregexp(this.form.num.value)>

允许复制<INPUT TYPE="checkbox" NAME="selechkmode">

<textarea NAME="regexplist" cols=58 rows=14 wrap=off>

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)]">

单步<INPUT TYPE="checkbox" NAME="scankmode"><BR>

<TEXTAREA NAME="reglist" COLS=58 ROWS=8></TEXTAREA>

</td>

<td valign=bottom>

匹配到的成分:(单步时可见)

<TEXTAREA NAME="matchlist" COLS=58 ROWS=8></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("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[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)

}

【正则表达式练习器】相关文章:

正则表达式

浅析正则表达式

Java正则表达式学习教程

半小时精通正则表达式-精华版

Js&Vbs正则表达式替换重复的字符

正则表达式详细介绍(上)

php正则表达式完全教程之精华篇

使用正则表达式 exec 获取字符串中的汉字

正则表达式学习问答

正则表达式学习笔记

精品推荐
分类导航