(……续例19)

这里将包含19个例子的网页文件放出来,可以直接保存成网页运行,也可以下载该源文件。

 
  
  1. <html>  
  2. <head>  
  3.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  4.     <title>ECMA标准(JScript & JavaScript)正则表达式 - 示例</title>  
  5.     <style>  
  6.         p  
  7.         {  
  8.             text-align:center;  
  9.             font-size:15pt;  
  10.         }  
  11.         input  
  12.         {  
  13.             width:350px;  
  14.             font-size:15pt;  
  15.         }  
  16.         span  
  17.         {  
  18.             width:50px;  
  19.         }  
  20.     </style>  
  21. </head>  
  22. <body>  
  23. <script type="text/jscript">  
  24.     void function reg_01() //匹配一个数字ID  
  25.     {  
  26.         var s1 = "12-12345",  
  27.             s2 = "12-1234567",  
  28.             s3 = "1-12345",  
  29.             s4 = "12-1234",  
  30.             s5 = "1212345678";  
  31.         var r = new RegExp("^\\d{2}-\\d{5,8}$""gim");  
  32.         for (i = 1; i <= 5; i++)  
  33.         {  
  34.             t = "alert(s" + i + ".match(r));";  
  35.             eval(t);  
  36.         }  
  37.     }  
  38.       
  39.     void function reg_02() //匹配成对的HTML标记  
  40.     {  
  41.         var s1 = "<body bgcolor=\"#FFFFFF\">Mengliao</body>",  
  42.             s2 = "<h3 class=\"s1\" align=\"center\">Bosun Network</h3>",  
  43.             s3 = "<div>梦辽软件</DIV>",  
  44.             s4 = "<div>Baiyu</span>";  
  45.         var r = /^<([a-z]+[a-z0-9]*).*>.*<\/\1>$/ig;  
  46.         for (i = 1; i <= 4; i++)  
  47.         {  
  48.             t = "alert(s" + i + ".match(r));";  
  49.             eval(t);  
  50.         }  
  51.     }  
  52.       
  53.     void function reg_03() //定位字符  
  54.     {  
  55.         var s = "Live for nothing,die for something";  
  56.         var r1 = /^Live for nothing,die for something$/g,  
  57.             r2 = /^Live for nothing,die for some$/g,  
  58.             r3 = /^Live for nothing,die for some/g;  
  59.         for (i = 1; i <= 3; i++)  
  60.         {  
  61.             t = "alert(s.match(r" + i + "));";  
  62.             eval(t);  
  63.         }  
  64.     }  
  65.       
  66.     void function reg_04()  
  67.     {  
  68.         var s = "Live for nothing,\ndie for something"//多行  
  69.         var r1 = /^.*/g, //匹配1次  
  70.             r2 = /^.*/mg, //匹配2次  
  71.             r3 = /^.*/m, //匹配1次  
  72.             r4 = /^.*/; //匹配1次  
  73.         for (n = 1; n <= 4; n++)  
  74.         {  
  75.             t = "alert(s.match(r" + n + ").length);";  
  76.             eval(t);  
  77.             t = "r" + n;  
  78.             for (i = 0; i < s.match(eval(t)).length; i++)  
  79.             {  
  80.                 alert(s.match(eval(t))[i]);  
  81.             }  
  82.         }  
  83.     }  
  84.       
  85.     void function reg_05()  
  86.     {  
  87.         var s1 = "Live for nothing,die for something",  
  88.             s2 = "Live for nothing,die for some thing";  
  89.         var r = /\bthing\b/g;  
  90.         alert(s1.match(r)); //匹配0次  
  91.         r = /thing\b/g;  
  92.         alert(s1.match(r)); //匹配2次  
  93.         r = /\bthing\b/g;  
  94.         alert(s2.match(r)); //匹配1次  
  95.         r = /\bfor something\b/g;  
  96.         alert(s1.match(r)); //匹配1次  
  97.         alert(s2.match(r)); //匹配0次  
  98.     }  
  99.       
  100.     void function reg_06()  
  101.     {  
  102.         var s1 = "1024",   
  103.             s2 = "+1024",  
  104.             s3 = "1,024",   
  105.             s4 = "1",   
  106.             s5 = "-1024",   
  107.             s6 = "10000";  
  108.         var r = /^\+?[1-9],?\d{3}$/g;  
  109.         for (i = 1; i <= 6; i++)  
  110.         {  
  111.             t = "alert(s" + i + ".match(r));" 
  112.             eval(t);  
  113.         }  
  114.     }  
  115.       
  116.     void function reg_07()  
  117.     {  
  118.         var s1 = "0",   
  119.             s2 = "0.23",  
  120.             s3 = "100",  
  121.             s4 = "100.01",  
  122.             s5 = "9.9",  
  123.             s6 = "99.9",  
  124.             s7 = "99.",  
  125.             s8 = "00.1",  
  126.             s9 = "05",  
  127.             s10 = "100.00",  
  128.             s11 = "100.",  
  129.             s12 = "+100.000";  
  130.         var r = /^\+?((100(.0+)?)|([1-9]?[0-9])(\.\d+)?)$/g; //匹配0到100的数  
  131.         for (i = 1; i <= 12; i++)  
  132.         {  
  133.             t = "alert(s" + i + ".match(r));" 
  134.             eval(t);  
  135.         }  
  136.     }  
  137.       
  138.     void function reg_08()  
  139.     {  
  140.         var s = "Mengliao   Software Studio";  
  141.         var r1 = /\t/g, //匹配1次  
  142.             r2 = /\s/g; //匹配2次  
  143.         for (i = 1; i <= 2; i++)  
  144.         {  
  145.             t = "alert(s.match(r" + i + "));" 
  146.             eval(t);  
  147.         }  
  148.     }  
  149.       
  150.     void function reg_09()  
  151.     {  
  152.         var s1 = "Live for nothing,die for something",  
  153.             s2 = "Live for nothing,die for somebody",  
  154.             s3 = "Live for noabcde,die for someabcde";  
  155.         var r = /^Live ([a-z]{3}) no([a-z]{5}),die \1 some\2$/g;  
  156.         for (i = 1; i <= 3; i++)  
  157.         {  
  158.             t = "alert(r.exec(s" + i + "));" 
  159.             eval(t);  
  160.         }  
  161.     }  
  162.  
  163.     void function reg_10()  
  164.     {  
  165.         var s = "Live for nothing,die for something";  
  166.         var r = /^Live ([a-z]{3}) no([a-z]{5}),die \1 some\2$/g;  
  167.         if (r.exec(s) != null)  
  168.         {  
  169.             alert("全局捕获组1: " + RegExp.$1 +   
  170.                   "\n全局捕获组2: " + RegExp.$2); //只能使用全局RegExp  
  171.         }  
  172.     }  
  173.       
  174.     void function reg_11()  
  175.     {  
  176.         var s = "Live for nothing";  
  177.         var r = /^Live for no(?:[a-z]{5})$/g;  
  178.         if (r.exec(s) != null)  
  179.         {  
  180.             alert("全局捕获组1: " + RegExp.$1);  
  181.         }  
  182.     }  
  183.       
  184.     void function reg_12()  
  185.     {  
  186.         var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())  
  187.         if (ver >= 5.5)  
  188.         {  
  189.             var s = "Live for nothing,die for something";  
  190.             var r = /\w+/g;  
  191.             while ((r.exec(s)) != null)  
  192.                 alert(RegExp.index + "-" + RegExp.lastIndex + ": " + RegExp.lastMatch);  
  193.         }  
  194.         else 
  195.         {  
  196.             alert("只有JScript 5.5及以上版本支持该功能。");  
  197.         }  
  198.     }  
  199.       
  200.     void function reg_13()  
  201.     {  
  202.         var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())  
  203.         if (ver >= 5.5)  
  204.         {  
  205.             var s = "Live for nothing,die for something";  
  206.             var r = /\w+/g;  
  207.             var arr;  
  208.             while ((arr = r.exec(s)) != null)  
  209.                 alert(arr.index + "-" + arr.lastIndex + ": " + arr);  
  210.         }  
  211.         else 
  212.         {  
  213.             alert("只有JScript 5.5及以上版本支持该功能。");  
  214.         }  
  215.     }  
  216.       
  217.     void function reg_14()  
  218.     {  
  219.         var s = "Live for nothing nothing";  
  220.         var r = /([a-z]+) \1/g;  
  221.         if (r.exec(s) != null)  
  222.         {  
  223.             alert(RegExp.$1);  
  224.             alert(s.replace(r,  RegExp.$1)); //JScript不支持命名组  
  225.         }  
  226.     }  
  227.       
  228.     void function reg_15()  
  229.     {  
  230.         var s = "Live for nothing,die for something";  
  231.         var r = /.*thing/; //默认贪婪模式  
  232.         alert(s.match(r));  
  233.         r = /.*?thing/; //非贪婪模式  
  234.         alert(s.match(r));  
  235.     }  
  236.       
  237.     void function reg_16()  
  238.     {  
  239.         var s = "Live for nothing,die for something";  
  240.         var r = /.*thing,/g; //默认回溯模式  
  241.         alert(s.match(r));  
  242.         //r = /(?>.*)thing,/g; //JScript不支持非回溯模式  
  243.         //alert(s.match(r));  
  244.     }  
  245.  
  246.     void function reg_17()  
  247.     {  
  248.         var s = "1024 used 2048 free";  
  249.         var r = /\d{4}(?= used)/g; //4位数字后紧跟" used"  
  250.         alert(s.match(r));  
  251.         r = /\d{4}(?! used)/g; //4位数字后不能跟有" used"  
  252.         alert(s.match(r));  
  253.         //JScript不支持逆序正向和逆序负向预搜索  
  254.     }  
  255.  
  256.     void function reg_18()  
  257.     {  
  258.         var s1 = "Mengliao Software",  
  259.             s2 = "梦辽软件 - Bosun Network Co., Ltd.",  
  260.             s3 = "一龻"//\u4e00, \u9fbb  
  261.             s4 = "﹁﹂﹃﹄"//CJK兼容字符  
  262.         var r = /[\u4e00-\u9fbb]/g;  
  263.         for (i = 1; i <= 4; i++)  
  264.         {  
  265.             t = "alert(s" + i + ".match(r));" 
  266.             eval(t);  
  267.         }  
  268.     }  
  269.       
  270.     void function reg_19(s)  
  271.     {  
  272.         var r = /^\+?0*(?:100(\.0*)?|(\d{0,2}(?=\.\d)|\d{1,2}(?=($|\.$)))(\.\d*)?)$/g;  
  273.         if (s.match(r) != null)  
  274.         {  
  275.             alert("匹配正常!");  
  276.         }  
  277.         else 
  278.         {  
  279.             alert("匹配失败!");  
  280.         }  
  281.     }  
  282. </script>  
  283. <p>ECMA标准(JScript & JavaScript)正则表达式 - 示例</p>  
  284. <p>转换自《梦辽.NET(C#)高级编程讲义》C08.S02</p>  
  285. <p>Ver 1.0.0 Build 20090607</p>  
  286. <p>  
  287.     <input type="button" value="01.匹配一个数字ID" onClick="reg_01()" />  
  288.     <span></span>  
  289.     <input type="button" value="02.匹配成对的HTML标记" onClick="reg_02()" />  
  290.     <br /><br />  
  291.     <input type="button" value="03.定位符匹配" onClick="reg_03()" />  
  292.     <span></span>  
  293.     <input type="button" value="04.多行、全文定位符匹配" onClick="reg_04()" />  
  294.     <br /><br />  
  295.     <input type="button" value="05.单词定位符匹配" onClick="reg_05()" />  
  296.     <span></span>  
  297.     <input type="button" value="06.重复描述符匹配" onClick="reg_06()" />  
  298.     <br /><br />  
  299.     <input type="button" value="07.择一匹配" onClick="reg_07()" />  
  300.     <span></span>  
  301.     <input type="button" value="08.非打印字符匹配" onClick="reg_08()" />  
  302.     <br /><br />  
  303.     <input type="button" value="09.捕获组匹配" onClick="reg_09()" />  
  304.     <span></span>  
  305.     <input type="button" value="10.全局获取捕获组匹配的内容" onClick="reg_10()" />  
  306.     <br /><br />  
  307.     <input type="button" value="11.非捕获组匹配" onClick="reg_11()" />  
  308.     <span></span>  
  309.     <input type="button" value="12.全局RegExp属性" onClick="reg_12()" />  
  310.     <br /><br />  
  311.     <input type="button" value="13.全局RegExp属性的另一种实现" onClick="reg_13()" />  
  312.     <span></span>  
  313.     <input type="button" value="14.全局组替换" onClick="reg_14()" />  
  314.     <br /><br />  
  315.     <input type="button" value="15.非贪婪匹配" onClick="reg_15()" />  
  316.     <span></span>  
  317.     <input type="button" value="16.贪婪模式下的回溯匹配" onClick="reg_16()" />  
  318.     <br /><br />  
  319.     <input type="button" value="17.顺序正向、顺序负向预搜索匹配" onClick="reg_17()" />  
  320.     <span></span>  
  321.     <input type="button" value="18.十六进制转义字符(汉字)匹配" onClick="reg_18()" />  
  322.     <br /><br />  
  323.     <input type="text" id="num" />  
  324.     <span></span>  
  325.     <input type="button" value="19.[0, 100]比较完备的匹配" onClick="reg_19(num.value)" />  
  326. </p>  
  327. <p>山西大同大学 数计学院 白宇</p>  
  328. <p>版权所有:梦辽软件 2009</p>  
  329. <p>Copyrights: Mengliao Software, 2009</p>  
  330. <!--  
  331. //匹配协议名、主机名、域名、目录名、文件名  
  332. string[] name = { "URI""Protocol""Host""Domain""Port""Folder""File" };  
  333. string[] URI = { @"http://www.bosun-net.com:8000/mengliao/cs/index.html", @"ftp://g.cn:21/list.zip", @"http://memory.zol.com.cn/more/" };  
  334. string URIPattern = @"^([a-z]{3,})://(?:([a-z0-9_-]*)\.)?((?:[a-z0-9_-]+\.?){3,})(?::([0-9]+))?((?:/[a-z0-9._-]+)*/)([a-z0-9._-]*)/?$";  
  335. for (int i = 0; i < URI.Length; i++)  
  336. {  
  337.     Match match = Regex.Match(URI[i], URIPattern, RegexOptions.IgnoreCase);  
  338.     int j = 0;  
  339.     foreach (Group x in match.Groups)  
  340.         Console.WriteLine("{0}: {1}", name[j++], x.Value);  
  341.     Console.WriteLine();  
  342. }  
  343. -->  
  344. </body>  
  345. </html> 

运行截图如下:

可以从后面的附件或这里的链接下载该源文件:http://mengliao.blog.51cto.com/p_w_upload/201012/876134_1293810016.rar

(全文完)