佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 正則表達式練習器

正則表達式練習器

熱門標簽:服務器配置 團購網(wǎng)站 電子圍欄 阿里云 Mysql連接數(shù)設置 科大訊飛語音識別系統(tǒng) 銀行業(yè)務 Linux服務器
復制代碼 代碼如下:

HTML>
HEAD>
TITLE>正則表達式練習器/TITLE>
meta name = 安徽 池州 統(tǒng)計局 徐祖寧 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;imatchArray.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
}

//定義選擇監(jiān)視
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>正規(guī)表達式練習器/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>
進行匹配的正規(guī)表達式:  忽略大小寫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.檢查數(shù)字:
([-+]?[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函數(shù)
修改后的execIt函數(shù)允許對多個正則表達式進行匹配(每個正則表達式一行),并對每一個匹配成分顯示出是第幾個正則表達式匹配的。
這可視為語法分析的雛形,只要對匹配產(chǎn)生相應的動作。

function execIt(form) {
var mode
if(form.chkmode.checked) mode = "gi"
else mode = "g"
var regexpArray = form.regexp.value.split("\r\n") //獲取正則表達式到數(shù)組

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;iregexpArray.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;imatchArray.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)
}

標簽:棗莊 江蘇 衡水 大理 廣元 蚌埠 萍鄉(xiāng) 衢州

巨人網(wǎng)絡通訊聲明:本文標題《正則表達式練習器》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 上一篇:17種正則表達式

    下一篇:ubbcode簡單實用

    收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    乌拉特后旗| 白沙| 绵阳市| 阜新| 桃园市| 北宁市| 内江市| 万载县| 夏河县| 竹山县| 塘沽区| 南部县| 乌拉特中旗| 宁阳县| 榆林市| 阳曲县| 三门县| 钟山县| SHOW| 承德县| 闽侯县| 罗定市| 且末县| 交口县| 西平县| 遂宁市| 阿拉善右旗| 鄂托克前旗| 宝丰县| 平乐县| 宁国市| 镇沅| 乐陵市| 枣强县| 获嘉县| 类乌齐县| 红安县| 南丹县| 新干县| 庆城县| 老河口市|