读书人

一个很见鬼的正则有关问题,高手过来看

发布时间: 2012-02-22 19:36:55 作者: rapoo

一个很见鬼的正则问题,高手过来看一下
if(reg.test(tr.cells[nType].innerHTML))哪个语句两次判断的条件完全一样,怎么结果就不一样呢.更见鬼的是若进行两次判断则可以得到正确的筛选结果,若去掉下面的一次判断则会漏掉一些符合条件的结果,对正则一直不太熟悉,调试了半天没找到结果,请大家帮忙看看
<html>
<head>
<title> </title>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 " />
</head>
<body>
<center>
<script type= "text/javascript ">

function Search(Tbl,TextValue)
{
var count=0;
var nType=GetType();
var keyWord=TextValue.value;
var strReg= "/^ "+keyWord+ ".*?$/gi "
var reg=window.eval(strReg);
var tr;
alert(reg);

if(keyWord!= " "){
for(var i=0;i <Tbl.rows.length;i++){
tr=Tbl.rows[i];
alert(tr.cells[nType].innerHTML);//测试数据

if(reg.test(tr.cells[nType].innerHTML)){//第一次判断
alert( "[true] ");
tr.style.display= "block ";
count++;
}
else{
alert( "[false] ");
tr.style.display= "none ";
}

if(reg.test(tr.cells[nType].innerHTML))//第二次判断
alert( "true ");
else
alert( "false ");

}
}

if(count==0){
alert( '找不到你要的记录! ');
ListAll(Tbl);
}
}

function ListAll(Tbl){
for(var i=0;i <Tbl.rows.length;i++){
Tbl.rows[i].style.display= "block ";
}
}

function GetType(){
var oInputs=document.getElementsByTagName( "input ");
for(var i=0;i <oInputs.length;i++)
if(oInputs[i].type== 'radio ' && oInputs[i].checked)
return oInputs[i].value;
}
</script>

<input id= "ttt " type= "text " style= "width:200 " >
<input type= "button " value= "查找 " onClick= "Search(Tbl1,ttt) " >
<input type= "button " value= "返回 " onClick= "ListAll(Tbl1) ">
<input name= "paytype " type= "radio " value= "0 " checked >
文字
<input type= "radio " name= "paytype " value= "1 " >
数字
<input type= "radio " name= "paytype " value= "2 " >
日期
<br>
<table width= "500 " id= "Tbl1 " border= "1 ">


<tr> <td> aaa </td> <td> 12 </td> <td> 1988 </td> </tr>
<tr> <td> 呵呵 </td> <td> 56 </td> <td> 1911 </td> </tr>
<tr> <td> ccc </td> <td> 55 </td> <td> 1920 </td> </tr>
<tr> <td> ddd </td>
<td> 12a </td> <td> 1953 </td> </tr>
<tr> <td> 呵呵 </td> <td> 55 </td> <td> 1877 </td> </tr>
<tr> <td> ddeed </td>
<td> 12345 </td> <td> 1983 </td> </tr>
<tr> <td> ddafd </td> <td> 58 </td> <td> 1988 </td> </tr>
</table>
</center>
</body>
</html>


[解决办法]
var reg=window.eval(strReg);
if(reg.test(tr.cells[nType].innerHTML))//第二次判断
alert( "true ");
else
alert( "false ");

}
第二次判断判断前编译下
参考下面第3个 后面有解释
http://community.csdn.net/Expert/TopicView3.asp?id=5422907
[解决办法]
正则表达式执行的问题,正则表达式也有属性
类似于全局变量,第一次执行完,有个lastIndex,这样继续从lastIndex执行下去,结果为false
然后lastIndex=0,继续开始
[解决办法]
重复使用的用于test的正则可以考虑不加 "g "

读书人网 >JavaScript

热点推荐