zoukankan      html  css  js  c++  java
  • 蛙蛙请教:js里的match方法和exec方法的区别,关于正则表达式的

    蛙蛙请教: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> 

  • 相关阅读:
    て和で用法的总结
    假如程序员上热搜是什么样的?网友:毫无违和感!
    一年精通,三年熟悉,五年了解,十年用过!C++真的这么难吗?
    新手上路,“hello word”其实是在告诉计算机又有菜鸟来了!
    从原理到方法,一步到位,教你如何应对C语言内存泄露!
    冰冷的英语字母,枯燥的编程教程,果断选择了放弃!真的吗?
    只有了解程序员的黑话,和他们打成一片获得buff加成,产品才能尽早上线!
    C语言编程小游戏「石头剪刀布」!源码分享~
    一行代码卖出570美元,什么样的代码能这么值钱?带你揭秘天价代码的内幕!
    源码解剖HashMap
  • 原文地址:https://www.cnblogs.com/onlytiancai/p/193386.html
Copyright © 2011-2022 走看看