蛙蛙请教:js里的match方法和exec方法的区别,有些晕,大家给解释一下原理
先来看第一段代码,这段代码用的是String对象的Match方法,能够弹出3个链接,说明正常匹配,但是里面的((.|\n)*?)和(.*?)我不知道有什么区别.
<div id="div1">
<a href="qy.php?id=129"><font color="#000000">北京丰收葡萄酒有限公司 </font></a>
<a href="qy.php?id=130"><font color="#000000">中国长城葡萄酒有限公司、华夏葡萄酿酒有限公司 </font></a>
<a href="qy.php?id=132"><font color="#000000">中法合营王朝葡萄酿酒有限公司 </font></a>
</div>
<br>
<SCRIPT LANGUAGE="JavaScript">
<!--
var str = div1.innerHTML;
var re = new RegExp("<a[^<>]+?\>((.|\n)*?)<\/a>", "gi");
var a = str.match(re);
for(var i=0;i<a.length;i++)
{
alert(a[i]);
}
//-->
</SCRIPT>
再来看第二段儿程序,这里只弹出了两个对话框,而且最后一个弹出的是括号里匹配的内容.
<div id="div1">
<a href="qy.php?id=129"><font color="#000000">北京丰收葡萄酒有限公司 </font></a>
<a href="qy.php?id=130"><font color="#000000">中国长城葡萄酒有限公司、华夏葡萄酿酒有限公司 </font></a>
<a href="qy.php?id=132"><font color="#000000">中法合营王朝葡萄酿酒有限公司 </font></a>
</div>
<br>
<SCRIPT LANGUAGE="JavaScript">
<!--
var str = div1.innerHTML;
var re = /<a[^<>]+>(.*?)<\/a>/gi;
var a = re.exec(str)
for(var i=0;i<a.length;i++)
{
alert(a[i]);
}
//-->
</SCRIPT> 这让小弟是很是纳闷儿,我想获取里面的129,130,132这些内容,还有那些链接的显示文本,就是那些汉字,弄的我好头大,真是的,后来经过"梦在流浪"的指点,写出了一下算法,总算是懂了一点正则表达式匹配的原理了,以前看过《javascript宝典》里讲的正则表达式匹配顺序和规律,都忘了。
<div id="div1">
<a href="qy.php?id=129"><font color="#000000">北京丰收葡萄酒有限公司 </font></a>
<a href="qy.php?id=130"><font color="#000000">中国长城葡萄酒有限公司、华夏葡萄酿酒有限公司 </font></a>
<a href="qy.php?id=132"><font color="#000000">中法合营王朝葡萄酿酒有限公司 </font></a>
</div>
<br>
<SCRIPT LANGUAGE="JavaScript">
<!--
var str = div1.innerHTML;
//alert(str);//这里你可以看到color="#000000"已经变成了color=#000000,没有了引号,所以再写表达式的时候要注意了.
var re = new RegExp("<a[^<>]+?\>((.|\n)*?)<\/a>", "gi");
var a = str.match(re); //第一次搜索
for(var i=0;i<a.length;i++)
{
var temp;
//alert("第一次搜索的完整匹配,包括括号里面的匹配部分\n"+a[i]);
temp = a[i].match(/qy.php\?id=(\d+)/ig); //第二次搜索
//alert("第二次搜索的完整匹配,也就是href的引号中间的部分\n"+temp[0]);
alert("第二次搜索的匹配结果的括号中的部分,也就是链接的数字参数\n"+RegExp.$1);
temp = a[i].match(/<font[^<>]+?color=#000000\>(.*?)<\/font>/ig);
alert("第三次搜索的匹配结果的括号中部分,也就是链接的文本部分\n"+RegExp.$1);
}
//-->
</SCRIPT>
顺便贴一下“梦在流浪给我的函数”
<SCRIPT LANGUAGE="JavaScript">
var str1 = div1.innerHTML;
var re = /<a[^<>]+>([^a]*?)<\/a>/gi;
var a = re.exec(str1);
var b=re.exec(str1);
var c=re.exec(str1);
alert(a[1]);
alert(b[1]);
alert(c[1]);
</SCRIPT>