<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>AUG Team - JS</title><link>http://www.augweb.net/blog/</link><description>welcome。。。 - </description><generator>RainbowSoft Studio Z-Blog 1.8 Spirit Build 80605</generator><language>zh-CN</language><copyright>Copyright @ 2003-2008 AUG.(专业网站建设 北京) All Rights Reserved.</copyright><pubDate>Fri, 10 Sep 2010 18:41:34 +0800</pubDate><item><title>jquery在浏览器滚动条上的应用</title><author>lorrons@gmail.com (lorron)</author><link>http://www.augweb.net/blog/post/176.html</link><pubDate>Fri, 09 Oct 2009 17:00:32 +0800</pubDate><guid>http://www.augweb.net/blog/post/176.html</guid><description><![CDATA[<p><a href="http://www.google.com/reader/">Google阅读器</a>上有一个AJAX效果很不错，就是阅读项目时不需要翻页，浏览器滚动条往下拉到一定位置时自动加载新的一批项目进来，一直到所有项目加载完为止。对于我来说再好不过了，因为我很不喜欢翻页，尤其是输入页码再定位到页。要知道，数据量增加很频繁时，要通过定位页码来找到目标数据似乎并没有什么意义。我觉得用户体验成熟的WEB应用程序应当引导用户使用TAG或搜索等功能来找到目标数据。至于浏览数据，尤其是浏览最新的数据，利用浏览器滚动条来加载，是很好的尝试…… <p>我试着用jquery来实现这个功能。先要得到滚动条的总长属性值：scrollHeight，还有滚动条当前位置属性值：scrollTop。然后通过计算，若当前值位于总长值三分之二时加载新数据。假设DOM上有一个元素为&lt;div id=”mypage”&gt;&lt;/div&gt;，该元素overflow样式为scroll，也就是元素中的内容溢出元素指定高度时启用滚动条。利用jquery的load方法为元素加载一个已经存在的文件，我假设它是table.html。这个文件的内容可以是足以使浏览器滚屏的一张数据表。 <p>&lt;script type=”text/javascript” src=”<a href="http://docs.jquery.com/Downloading_jQuery">jquery.js</a>“&gt;//加载jquery库&lt;/script&gt;<br>&lt;script type=”text/javascript”&gt; <p>var hght=0;//初始化滚动条总长<br>var top=0;//初始化滚动条的当前位置<br>$(document).ready(function(){//DOM的onload事件<br>&nbsp; $(”#mypage”).load(”table.html”);//table.html的内容被加载到mypage元素 <p>&nbsp; $(”#mypage”).scroll( function() {//定义滚动条位置改变时触发的事件。<br>&nbsp;&nbsp;&nbsp; hght=this.scrollHeight;//得到滚动条总长，赋给hght变量<br>&nbsp;&nbsp;&nbsp; top=this.scrollTop;//得到滚动条当前值，赋给top变量<br>&nbsp; });<br>}); <p>setInterval(”cando();”,2000);//每隔2秒钟调用一次cando函数来判断当前滚动条位置。 <p>function cando(){<br>&nbsp; if(top&gt;parseInt(hght/3)*2)//判断滚动条当前位置是否超过总长的2/3，parseInt为取整函数<br>&nbsp;&nbsp;&nbsp; show();//如果是，调用show函数加载内容。<br>} <p>function show(){<br>&nbsp; $.get(”table.html”, function(data){//利用jquery的get方法得到table.html内容<br>&nbsp;&nbsp;&nbsp; $(”#mypage”).append(data);//用append方法追加内容到mypage元素。<br>&nbsp;&nbsp;&nbsp; hght=0;//恢复滚动条总长，因为$(”#mypage”).scroll事件一触发，又会得到新值，不恢复的话可能会造成判断错误而再次加载……<br>&nbsp;&nbsp;&nbsp; top=0;//原因同上。<br>&nbsp; });<br>} <p>&lt;/script&gt;<br>&lt;div id=”mypage”&gt;&lt;/div&gt; <p>为什么要隔2秒钟调用一次判断呢？因为只要$(”#mypage”).scroll事件一被触发，就会影hght和top值，这个值可能总是满足cando函数的判断，也就是top值总是位于hght的三分之二。因此可能会多次加载造成服务器负担加重。而每加载一次后把hght和top值赋0，也是这个原因。 <p>这段代码的效果就是只要元素mypage的滚动条位置位于滚动条总长的三分之二时，追加table.html的内容到元素mypage中去。当然这样运行是无休止地加载下去。在真正的AJAX运用中，table.html可以换成asp或php脚本，接收get或post参数来进行处理，然后返回有意义的数据。jquery的get方法可以设置get方式的参数数据，比如： <p>$.get(”test.php”, { name: “boho”, id: “1″ } ); <p>相当于http://hostlocal/test.php?name=boho&amp;id=1这种形式的http访问。然后通过get方法的回调函数来获取test.php输出的内容： <p>$.get(”test.php”, {name:”boho”,id:”1″},function(data){<br>&nbsp; alert(”Data Loaded: ” + data);<br>});</p>]]></description><category>JS</category><comments>http://www.augweb.net/blog/post/176.html#comment</comments><wfw:comment>http://www.augweb.net/blog/</wfw:comment><wfw:commentRss>http://www.augweb.net/blog/feed.asp?cmt=176</wfw:commentRss><trackback:ping>http://www.augweb.net/blog/cmd.asp?act=tb&amp;id=176&amp;key=70282b5a</trackback:ping></item><item><title>来自Google的密码强度Javascript验证代码 收藏</title><author>lorrons@gmail.com (lorron)</author><link>http://www.augweb.net/blog/post/132.html</link><pubDate>Thu, 22 Jan 2009 17:03:00 +0800</pubDate><guid>http://www.augweb.net/blog/post/132.html</guid><description><![CDATA[<p> 先看看效果吧：<br><img height="36" alt="" src="http://www.cnblogs.com/images/cnblogs_com/anjou/PasswordValid.JPG" width="434" border="0"> <p></p> <p>&nbsp; <p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br>&lt;html xmlns="<a href="http://www.w3.org/1999/xhtml&quot;">http://www.w3.org/1999/xhtml"</a>&gt;<br>&lt;head&gt;<br>&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;<br>&lt;title&gt;aaa&lt;/title&gt;<br>&lt;/head&gt;  <p>&lt;body&gt;<br>&lt;script type="text/javascript"&gt;<br>var agt = navigator.userAgent.toLowerCase();<br>var is_op = (agt.indexOf("opera") != -1);<br>var is_ie = (agt.indexOf("msie") != -1) &amp;&amp; document.all &amp;&amp; !is_op;<br>var is_ie5 = (agt.indexOf("msie 5") != -1) &amp;&amp; document.all &amp;&amp; !is_op;  <p>function CreateXmlHttpReq(handler) {<br>&nbsp; var xmlhttp = null;<br>&nbsp; if (is_ie) {<br>&nbsp;&nbsp;&nbsp; var control = (is_ie5) ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP";<br>&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlhttp = new ActiveXObject(control);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlhttp.onreadystatechange = handler;<br>&nbsp;&nbsp;&nbsp; } catch (ex) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("You need to enable active scripting and activeX controls");&nbsp; <br>&nbsp;&nbsp;&nbsp; }  <p>&nbsp; } else {<br>&nbsp;&nbsp;&nbsp; xmlhttp = new XMLHttpRequest();<br>&nbsp;&nbsp;&nbsp; xmlhttp.onload = handler;<br>&nbsp;&nbsp;&nbsp; xmlhttp.onerror = handler;<br>&nbsp; }<br>&nbsp; return xmlhttp;<br>}  <p>function XmlHttpPOST(xmlhttp, url, data) {<br>&nbsp; try {<br>&nbsp;&nbsp;&nbsp; xmlhttp.open("POST", url, true);<br>&nbsp;&nbsp;&nbsp; xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");<br>&nbsp;&nbsp;&nbsp; xmlhttp.send(data);  <p>&nbsp; } catch (ex) {<br>&nbsp;&nbsp;&nbsp; // do nothing<br>&nbsp; }<br>}  <p>var myxmlhttp;<br>ratingMsgs = new Array(6);<br>ratingMsgColors = new Array(6);<br>barColors = new Array(6);  <p>ratingMsgs[0] = "太短";<br>ratingMsgs[1] = "弱";<br>ratingMsgs[2] = "一般";<br>ratingMsgs[3] = "很好";<br>ratingMsgs[4] = "极佳";<br>ratingMsgs[5] = "未评级";  <p>ratingMsgColors[0] = "#676767";<br>ratingMsgColors[1] = "#aa0033";<br>ratingMsgColors[2] = "#f5ac00";<br>ratingMsgColors[3] = "#6699cc";<br>ratingMsgColors[4] = "#008000";<br>ratingMsgColors[5] = "#676767";  <p>barColors[0] = "#dddddd";<br>barColors[1] = "#aa0033";<br>barColors[2] = "#ffcc33";<br>barColors[3] = "#6699cc";<br>barColors[4] = "#008000";<br>barColors[5] = "#676767";  <p>function CreateRatePasswdReq () <br>{<br>var passwd = getElement('Passwd').value;<br>var email = getElement('Email').value;<br>var lastname = getElement('LastName').value;<br>var firstname = getElement('FirstName').value;<br>var min_passwd_len = 6;  <p>if (passwd.length &lt; min_passwd_len)&nbsp; <br>{<br>&nbsp; if (passwd.length &gt; 0) <br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; DrawBar(0);<br>&nbsp; } <br>&nbsp; else <br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; ResetBar();<br>&nbsp; }<br>}<br>else <br>{<br>&nbsp;&nbsp;&nbsp; passwd = escape(passwd);<br>&nbsp;&nbsp;&nbsp; var params = 'Passwd='+passwd+'&amp;Email='+email+'&amp;FirstName='+firstname+'&amp;LastName='+lastname;<br>&nbsp;&nbsp;&nbsp; myxmlhttp = CreateXmlHttpReq(RatePasswdXmlHttpHandler);<br>&nbsp;&nbsp;&nbsp; XmlHttpPOST(myxmlhttp, "<a href="https://www.google.com/accounts/RatePassword&quot;">https://www.google.com/accounts/RatePassword"</a>, params);<br>}<br>}  <p>function getElement(name) <br>{<br>&nbsp; if (document.all) <br>&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return document.all(name);<br>&nbsp; }<br>&nbsp; return document.getElementById(name);<br>}  <p>function RatePasswdXmlHttpHandler() <br>{ // Can't check status since safari doesn't support it<br>&nbsp; if (myxmlhttp.readyState != 4) <br>&nbsp; {<br>&nbsp; return;<br>&nbsp; }<br>&nbsp; rating = parseInt(myxmlhttp.responseText);<br>&nbsp; DrawBar(rating);<br>}  <p>function DrawBar(rating) <br>{<br>var posbar = getElement('posBar');<br>var negbar = getElement('negBar');<br>var passwdRating = getElement('passwdRating');<br>var barLength = getElement('passwdBar').width;  <p>if (rating &gt;= 0 &amp;&amp; rating &lt;= 4) <br>{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //We successfully got a rating<br>&nbsp;&nbsp;&nbsp; posbar.style.width = barLength / 4 * rating + "px";<br>&nbsp;&nbsp;&nbsp; negbar.style.width = barLength / 4 * (4 - rating) + "px";<br>}<br>else <br>{<br>&nbsp;&nbsp;&nbsp; posbar.style.width = "0px";<br>&nbsp;&nbsp;&nbsp; negbar.style.width = barLength + "px";<br>&nbsp;&nbsp;&nbsp; rating = 5; // Not rated Rating<br>}<br>posbar.style.background = barColors[rating]<br>passwdRating.innerHTML = "&lt;font color='" + ratingMsgColors[rating] +"'&gt;" + ratingMsgs[rating] + "&lt;/font&gt;";<br>}  <p>&nbsp; //Resets the password strength bar back to its initial state without any message showing.<br>&nbsp; function ResetBar() <br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; var posbar = getElement('posBar');<br>&nbsp;&nbsp;&nbsp; var negbar = getElement('negBar');<br>&nbsp;&nbsp;&nbsp; var passwdRating = getElement('passwdRating');<br>&nbsp;&nbsp;&nbsp; var barLength = getElement('passwdBar').width;  <p>&nbsp;&nbsp;&nbsp; posbar.style.width = "0px";<br>&nbsp;&nbsp;&nbsp; negbar.style.width = barLength + "px";<br>&nbsp;&nbsp;&nbsp; passwdRating.innerHTML = "";<br>&nbsp; }  <p>&lt;/script&gt;  <p>&lt;table width="60%"&nbsp; border="0"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="30%"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="hidden" value="" id="FirstName" size="30"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="hidden" value="" id="LastName" size="30"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="hidden" id="Email" value="" size="30"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="password" id="Passwd" value="" onkeyup="CreateRatePasswdReq()" size="30"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="70%"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table cellpadding="0" cellspacing="0" border="0"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="200" id="passwdBar"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table cellpadding="0" cellspacing="0" border="0"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td nowrap valign="top"&nbsp; height="15px"&gt;&lt;font color="#808080" size="-1" face="Arial, sans-serif"&gt;&lt;div id="passwdRating"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td height="3px"&gt;&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan="2"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table cellpadding="0" bgcolor="#ffffff" cellspacing="0" border="0" width="200"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="0%" id="posBar" bgcolor="#e0e0e0" height="4px"&gt;&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="100%" id="negBar" bgcolor="#e0e0e0" height="4px"&gt;&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br>&lt;/table&gt;  <p>&lt;/body&gt;<br>&lt;/html&gt;]]></description><category>JS</category><comments>http://www.augweb.net/blog/post/132.html#comment</comments><wfw:comment>http://www.augweb.net/blog/</wfw:comment><wfw:commentRss>http://www.augweb.net/blog/feed.asp?cmt=132</wfw:commentRss><trackback:ping>http://www.augweb.net/blog/cmd.asp?act=tb&amp;id=132&amp;key=857f2c8c</trackback:ping></item><item><title>复制CSDN的BLOG代码，去掉前面行号的方法收藏</title><author>lorrons@gmail.com (lorron)</author><link>http://www.augweb.net/blog/post/130.html</link><pubDate>Thu, 22 Jan 2009 08:54:19 +0800</pubDate><guid>http://www.augweb.net/blog/post/130.html</guid><description><![CDATA[<p>我们如果从CSDN的BLOG复制代码，出现前面的行号，比如<br>&nbsp;&nbsp; 1. /* 文本没有缩写 */<br>&nbsp;&nbsp; 2. /* Specify blanket rules for all elements */<br>&nbsp;&nbsp; 3. font-size:12px;<br>&nbsp;&nbsp; 4. line-height:160%;<br>&nbsp;&nbsp; 5. font-weight:bold;<br>&nbsp;&nbsp; 6. font-style:italic;<br>&nbsp;&nbsp; 7. font-family: "Lucida Grande",Arial,Sans-serif;<br>&nbsp;&nbsp; 8.<br>&nbsp;&nbsp; 9. /* 文本有缩写 */<br>&nbsp; 10. /* Specify blanket rules for all elements */<br>&nbsp; 11. font: 12px/160% bold italic "Lucida Grande",Arial,Sans-serif;<br>我们可以用正则表达式替换掉他们。<br>正则为 <br>^\s+\d+\.<br>替换为空格就行了</p>]]></description><category>JS</category><comments>http://www.augweb.net/blog/post/130.html#comment</comments><wfw:comment>http://www.augweb.net/blog/</wfw:comment><wfw:commentRss>http://www.augweb.net/blog/feed.asp?cmt=130</wfw:commentRss><trackback:ping>http://www.augweb.net/blog/cmd.asp?act=tb&amp;id=130&amp;key=bc11e28d</trackback:ping></item><item><title>好东西分享 [自动生成文章摘要]</title><author>lorrons@gmail.com (lorron)</author><link>http://www.augweb.net/blog/post/93.html</link><pubDate>Sat, 29 Nov 2008 02:19:04 +0800</pubDate><guid>http://www.augweb.net/blog/post/93.html</guid><description><![CDATA[<p>function AutoIntro() {<br />&nbsp;&nbsp;FCKeditorAPI.GetInstance('txaIntro').SetHTML(FCKeditorAPI.GetInstance('txaContent').GetHTML().replace(/&lt;[^&gt;]+&gt;/g, &quot;&quot;).substring(0,200));&nbsp;&nbsp;&nbsp;&nbsp; //FCK会自动处理未闭合的标签，我们不用多管它。要是标签被切了一半显示出来了自己编辑下就好。<br />&nbsp;}</p>]]></description><category>JS</category><comments>http://www.augweb.net/blog/post/93.html#comment</comments><wfw:comment>http://www.augweb.net/blog/</wfw:comment><wfw:commentRss>http://www.augweb.net/blog/feed.asp?cmt=93</wfw:commentRss><trackback:ping>http://www.augweb.net/blog/cmd.asp?act=tb&amp;id=93&amp;key=20f41eae</trackback:ping></item><item><title>Java正则表达式详解</title><author>lorrons@gmail.com (lorron)</author><link>http://www.augweb.net/blog/post/69.html</link><pubDate>Wed, 24 Sep 2008 04:16:20 +0800</pubDate><guid>http://www.augweb.net/blog/post/69.html</guid><description><![CDATA[<h4>Java正则表达式详解</h4> <p>来源:<a href="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4.asp" target="_blank">http://www.ccw.com.cn/htm/app/aprog/01_7_31_4.asp</a>  <p>如果你曾经用过Perl或任何其他内建正则表达式支持的语言，你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语，那么“正则表达式”（Regular Expression）就是一个字符构成的串，它定义了一个用来搜索匹配字符串的模式。  <p>许多语言，包括Perl、PHP、Python、JavaScript和JScript，都支持用正则表达式处理文本，一些文本编辑器用正则表达式实现高级“搜索-替换”功能。那么Java又怎样呢？本文写作时，一个包含了用正则表达式进行文本处理的Java规范需求（Specification Request）已经得到认可，你可以期待在JDK的下一版本中看到它。  <p>然而，如果现在就需要使用正则表达式，又该怎么办呢？你可以从Apache.org下载源代码开放的Jakarta-ORO库。本文接下来的内容先简要地介绍正则表达式的入门知识，然后以Jakarta-ORO API为例介绍如何使用正则表达式。  <p><strong>一、正则表达式基础知识</strong> <p>我们先从简单的开始。假设你要搜索一个包含字符“cat”的字符串，搜索用的正则表达式就是“cat”。如果搜索对大小写不敏感，单词“catalog”、“Catherine”、“sophisticated”都可以匹配。也就是说：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_a.jpg" border="0"> <p><strong>1.1 句点符号</strong> <p>假设你在玩英文拼字游戏，想要找出三个字母的单词，而且这些单词必须以“t”字母开头，以“n”字母结束。另外，假设有一本英文字典，你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式，你可以使用一个通配符——句点符号“.”。这样，完整的表达式就是“t.n”，它匹配“tan”、“ten”、“tin”和“ton”，还匹配“t#n”、“tpn”甚至“t n”，还有其他许多无意义的组合。这是因为句点符号匹配所有字符，包括空格、Tab字符甚至换行符：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_b.jpg" border="0"> <p><strong>1.2 方括号符号</strong> <p>为了解决句点符号匹配范围过于广泛这一问题，你可以在方括号（“[]”）里面指定看来有意义的字符。此时，只有方括号里面指定的字符才参与匹配。也就是说，正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配，因为在方括号之内你只能匹配单个字符：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_c.jpg" border="0"> <p><strong>1.3 “或”符号</strong> <p>如果除了上面匹配的所有单词之外，你还想要匹配“toon”，那么，你可以使用“|”操作符。“|”操作符的基本意义就是“或”运算。要匹配“toon”，使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号，因为方括号只允许匹配单个字符；这里必须使用圆括号“()”。圆括号还可以用来分组，具体请参见后面介绍。  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_d.jpg" border="0"> <p><strong>1.4 表示匹配次数的符号</strong> <p>表一显示了表示匹配次数的符号，这些符号用来确定紧靠该符号左边的符号出现的次数：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4n.jpg" border="0"> <p>假设我们要在文本文件中搜索美国的社会安全号码。这个号码的格式是999-99-9999。用来匹配它的正则表达式如图一所示。在正则表达式中，连字符（“-”）有着特殊的意义，它表示一个范围，比如从0到9。因此，匹配社会安全号码中的连字符号时，它的前面要加上一个转义字符“\”。  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4a.gif" border="0"> <p>图一：匹配所有123-12-1234形式的社会安全号码 <p>假设进行搜索的时候，你希望连字符号可以出现，也可以不出现——即，999-99-9999和999999999都属于正确的格式。这时，你可以在连字符号后面加上“？”数量限定符号，如图二所示：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4b.gif" border="0"> <p>图二：匹配所有123-12-1234和123121234形式的社会安全号码 <p>下面我们再来看另外一个例子。美国汽车牌照的一种格式是四个数字加上二个字母。它的正则表达式前面是数字部分“[0-9]{4}”，再加上字母部分“[A-Z]{2}”。图三显示了完整的正则表达式。  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4c.gif" border="0"> <p>图三：匹配典型的美国汽车牌照号码，如8836KV <p>1.5 “否”符号  <p>“^”符号称为“否”符号。如果用在方括号内，“^”表示不想要匹配的字符。例如，图四的正则表达式匹配所有单词，但以“X”字母开头的单词除外。  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4d.gif" border="0"> <p>图四：匹配所有单词，但“X”开头的除外 <p>1.6 圆括号和空白符号  <p>假设要从格式为“June 26, 1951”的生日日期中提取出月份部分，用来匹配该日期的正则表达式可以如图五所示：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4e.gif" border="0"> <p>图五：匹配所有Moth DD,YYYY格式的日期 <p>新出现的“\s”符号是空白符号，匹配所有的空白字符，包括Tab字符。如果字符串正确匹配，接下来如何提取出月份部分呢？只需在月份周围加上一个圆括号创建一个组，然后用ORO API（本文后面详细讨论）提取出它的值。修改后的正则表达式如图六所示：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4f.gif" border="0"> <p>图六：匹配所有Month DD,YYYY格式的日期，定义月份值为第一个组 <p><strong>1.7 其它符号</strong> <p>为简便起见，你可以使用一些为常见正则表达式创建的快捷符号。如表二所示：  <p>表二：常用符号  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4o.jpg" border="0"> <p>例如，在前面社会安全号码的例子中，所有出现“[0-9]”的地方我们都可以使用“\d”。修改后的正则表达式如图七所示：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4g.gif" border="0"> <p>图七：匹配所有123-12-1234格式的社会安全号码 <p><strong>二、Jakarta-ORO库</strong> <p>有许多源代码开放的正则表达式库可供Java程序员使用，而且它们中的许多支持Perl 5兼容的正则表达式语法。我在这里选用的是Jakarta-ORO正则表达式库，它是最全面的正则表达式API之一，而且它与Perl 5正则表达式完全兼容。另外，它也是优化得最好的API之一。  <p>Jakarta-ORO库以前叫做OROMatcher，Daniel Savarese大方地把它赠送给了Jakarta Project。你可以按照本文最后参考资源的说明下载它。  <p>我首先将简要介绍使用Jakarta-ORO库时你必须创建和访问的对象，然后介绍如何使用Jakarta-ORO API。  <p><strong>▲ PatternCompiler对象</strong> <p>首先，创建一个Perl5Compiler类的实例，并把它赋值给PatternCompiler接口对象。Perl5Compiler是PatternCompiler接口的一个实现，允许你把正则表达式编译成用来匹配的Pattern对象。  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_e.jpg" border="0"> <p><strong>▲ Pattern对象</strong> <p>要把正则表达式编译成Pattern对象，调用compiler对象的compile()方法，并在调用参数中指定正则表达式。例如，你可以按照下面这种方式编译正则表达式“t[aeio]n”：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_f.jpg" border="0"> <p>默认情况下，编译器创建一个大小写敏感的模式（pattern）。因此，上面代码编译得到的模式只匹配“tin”、“tan”、 “ten”和“ton”，但不匹配“Tin”和“taN”。要创建一个大小写不敏感的模式，你应该在调用编译器的时候指定一个额外的参数：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_g.jpg" border="0"> <p>创建好Pattern对象之后，你就可以通过PatternMatcher类用该Pattern对象进行模式匹配。  <p><strong>▲ PatternMatcher对象</strong> <p>;PatternMatcher对象根据Pattern对象和字符串进行匹配检查。你要实例化一个Perl5Matcher类并把结果赋值给PatternMatcher接口。Perl5Matcher类是PatternMatcher接口的一个实现，它根据Perl 5正则表达式语法进行模式匹配：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_h.jpg" border="0"> <p>使用PatternMatcher对象，你可以用多个方法进行匹配操作，这些方法的第一个参数都是需要根据正则表达式进行匹配的字符串：  <p>· boolean matches(String input, Pattern pattern)：当输入字符串和正则表达式要精确匹配时使用。换句话说，正则表达式必须完整地描述输入字符串。  <p>· boolean matchesPrefix(String input, Pattern pattern)：当正则表达式匹配输入字符串起始部分时使用。  <p>· boolean contains(String input, Pattern pattern)：当正则表达式要匹配输入字符串的一部分时使用（即，它必须是一个子串）。  <p>另外，在上面三个方法调用中，你还可以用PatternMatcherInput对象作为参数替代String对象；这时，你可以从字符串中最后一次匹配的位置开始继续进行匹配。当字符串可能有多个子串匹配给定的正则表达式时，用PatternMatcherInput对象作为参数就很有用了。用PatternMatcherInput对象作为参数替代String时，上述三个方法的语法如下：  <p>· boolean matches(PatternMatcherInput input, Pattern pattern)  <p>· boolean matchesPrefix(PatternMatcherInput input, Pattern pattern)  <p>· boolean contains(PatternMatcherInput input, Pattern pattern)  <p><strong>三、应用实例</strong> <p>下面我们来看看Jakarta-ORO库的一些应用实例。  <p><strong>3.1 日志文件处理</strong> <p>任务：分析一个Web服务器日志文件，确定每一个用户花在网站上的时间。在典型的BEA WebLogic日志文件中，日志记录的格式如下：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_i.jpg" border="0"> <p>分析这个日志记录，可以发现，要从这个日志文件提取的内容有两项：IP地址和页面访问时间。你可以用分组符号（圆括号）从日志记录提取出IP地址和时间标记。  <p>首先我们来看看IP地址。IP地址有4个字节构成，每一个字节的值在0到255之间，各个字节通过一个句点分隔。因此，IP地址中的每一个字节有至少一个、最多三个数字。图八显示了为IP地址编写的正则表达式：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4h.gif" border="0"> <p>图八：匹配IP地址 <p>IP地址中的句点字符必须进行转义处理（前面加上“\”），因为IP地址中的句点具有它本来的含义，而不是采用正则表达式语法中的特殊含义。句点在正则表达式中的特殊含义本文前面已经介绍。  <p>日志记录的时间部分由一对方括号包围。你可以按照如下思路提取出方括号里面的所有内容：首先搜索起始方括号字符（“[”），提取出所有不超过结束方括号字符（“]”）的内容，向前寻找直至找到结束方括号字符。图九显示了这部分的正则表达式。  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4i.gif" border="0"> <p>图九：匹配至少一个字符，直至找到“]” <p>现在，把上述两个正则表达式加上分组符号（圆括号）后合并成单个表达式，这样就可以从日志记录提取出IP地址和时间。注意，为了匹配“- -”（但不提取它），正则表达式中间加入了“\s-\s-\s”。完整的正则表达式如图十所示。  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4j.gif" border="0"> <p>图十：匹配IP地址和时间标记 <p>现在正则表达式已经编写完毕，接下来可以编写使用正则表达式库的Java代码了。  <p>为使用Jakarta-ORO库，首先创建正则表达式字符串和待分析的日志记录字符串：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_j.jpg" border="0"> <p>这里使用的正则表达式与图十的正则表达式差不多完全相同，但有一点例外：在Java中，你必须对每一个向前的斜杠（“\”）进行转义处理。图十不是Java的表示形式，所以我们要在每个“\”前面加上一个“\”以免出现编译错误。遗憾的是，转义处理过程很容易出现错误，所以应该小心谨慎。你可以首先输入未经转义处理的正则表达式，然后从左到右依次把每一个“\”替换成“\\”。如果要复检，你可以试着把它输出到屏幕上。  <p>初始化字符串之后，实例化PatternCompiler对象，用PatternCompiler编译正则表达式创建一个Pattern对象：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_k.jpg" border="0"> <p>现在，创建PatternMatcher对象，调用PatternMatcher接口的contain()方法检查匹配情况：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_l.jpg" border="0"> <p>接下来，利用PatternMatcher接口返回的MatchResult对象，输出匹配的组。由于logEntry字符串包含匹配的内容，你可以看到类如下面的输出：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_m.jpg" border="0"> <p><strong>3.2 HTML处理实例一</strong> <p>下面一个任务是分析HTML页面内FONT标记的所有属性。HTML页面内典型的FONT标记如下所示：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_n.jpg" border="0"> <p>程序将按照如下形式，输出每一个FONT标记的属性：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_o.jpg" border="0"> <p>在这种情况下，我建议你使用两个正则表达式。第一个如图十一所示，它从字体标记提取出“"face="Arial, Serif" size="+2" color="red"”。  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4k.gif" border="0"> <p>图十一：匹配FONT标记的所有属性 <p>第二个正则表达式如图十二所示，它把各个属性分割成名字-值对。  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4l.gif" border="0"> <p>图十二：匹配单个属性，并把它分割成名字-值对 <p>分割结果为：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_p.jpg" border="0"> <p>现在我们来看看完成这个任务的Java代码。首先创建两个正则表达式字符串，用Perl5Compiler把它们编译成Pattern对象。编译正则表达式的时候，指定Perl5Compiler.CASE_INSENSITIVE_MASK选项，使得匹配操作不区分大小写。  <p>接下来，创建一个执行匹配操作的Perl5Matcher对象。  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_q.jpg" border="0"> <p>假设有一个String类型的变量html，它代表了HTML文件中的一行内容。如果html字符串包含FONT标记，匹配器将返回true。此时，你可以用匹配器对象返回的MatchResult对象获得第一个组，它包含了FONT的所有属性：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_r.jpg" border="0"> <p>接下来创建一个PatternMatcherInput对象。这个对象允许你从最后一次匹配的位置开始继续进行匹配操作，因此，它很适合于提取FONT标记内属性的名字-值对。创建PatternMatcherInput对象，以参数形式传入待匹配的字符串。然后，用匹配器实例提取出每一个FONT的属性。这通过指定PatternMatcherInput对象（而不是字符串对象）为参数，反复地调用PatternMatcher对象的contains()方法完成。PatternMatcherInput对象之中的每一次迭代将把它内部的指针向前移动，下一次检测将从前一次匹配位置的后面开始。  <p>本例的输出结果如下：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_s.jpg" border="0"> <p><strong>3.3 HTML处理实例二</strong> <p>下面我们来看看另一个处理HTML的例子。这一次，我们假定Web服务器从widgets.acme.com移到了newserver.acme.com。现在你要修改一些页面中的链接：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_t.jpg" border="0"> <p>执行这个搜索的正则表达式如图十三所示：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4m.gif" border="0"> <p>图十三：匹配修改前的链接 <p>如果能够匹配这个正则表达式，你可以用下面的内容替换图十三的链接：  <p><a href="http://newserver.acme.com/interface.html#$1"></a><img src="http://www.java2000.net/images/thread/22/01_7_31_4_u.jpg" border="0"> <p>注意#字符的后面加上了$1。Perl正则表达式语法用$1、$2等表示已经匹配且提取出来的组。图十三的表达式把所有作为一个组匹配和提取出来的内容附加到链接的后面。  <p>现在，返回Java。就象前面我们所做的那样，你必须创建测试字符串，创建把正则表达式编译到Pattern对象所必需的对象，以及创建一个PatternMatcher对象：<img src="http://www.java2000.net/images/thread/22/01_7_31_4_v.jpg" border="0"> <p>接下来，用com.oroinc.text.regex包Util类的substitute()静态方法进行替换，输出结果字符串：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_w.jpg" border="0"> <p>Util.substitute()方法的语法如下：  <p><img src="http://www.java2000.net/images/thread/22/01_7_31_4_x.jpg" border="0"> <p>这个调用的前两个参数是以前创建的PatternMatcher和Pattern对象。第三个参数是一个Substiution对象，它决定了替换操作如何进行。本例使用的是Perl5Substitution对象，它能够进行Perl5风格的替换。第四个参数是想要进行替换操作的字符串，最后一个参数允许指定是否替换模式的所有匹配子串（Util.SUBSTITUTE_ALL），或只替换指定的次数。  <p><strong>【结束语】</strong>在这篇文章中，我为你介绍了正则表达式的强大功能。只要正确运用，正则表达式能够在字符串提取和文本修改中起到很大的作用。另外，我还介绍了如何在Java程序中通过Jakarta-ORO库利用正则表达式。至于最终采用老式的字符串处理方式（使用StringTokenizer，charAt，和substring），还是采用正则表达式，这就有待你自己决定了。</p>]]></description><category>JS</category><comments>http://www.augweb.net/blog/post/69.html#comment</comments><wfw:comment>http://www.augweb.net/blog/</wfw:comment><wfw:commentRss>http://www.augweb.net/blog/feed.asp?cmt=69</wfw:commentRss><trackback:ping>http://www.augweb.net/blog/cmd.asp?act=tb&amp;id=69&amp;key=55f4f256</trackback:ping></item><item><title>长文章分页类</title><author>lorrons@gmail.com (lorron)</author><link>http://www.augweb.net/blog/post/28.html</link><pubDate>Sat, 19 Jul 2008 02:00:49 +0800</pubDate><guid>http://www.augweb.net/blog/post/28.html</guid><description><![CDATA[<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f3b38136-7b83-44b0-b847-1b9cf5f052d0" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Tags: <a rel="tag" href="http://www.aiyouji.com/blog/catalog.asp?tags=%e5%88%86%e9%a1%b5">分页</a>, <a rel="tag" href="http://www.aiyouji.com/blog/catalog.asp?tags=JS">JS</a></div><p>长文章分页类</p><p><br />有些新闻内容比较长，想分不同的几页来显示，简短的就可以一页，长点的可以随意分2页或者3页，求一个比较好的分页方式，或者一种思路。</p><p><br />通过编辑时手动插入特定字符串作为分页符，然后页面显示时判断分页。</p><p>&nbsp;</p><p>分页有这么几个技术难点：</p><p>1、分段，就是上面说的希望段落1在第一页，段落2在第二页；这样的设计需要人为添加分页符号，然后程序判断分页； <br />2、文章中间存在html代码，比如文章是带Table的，分页会造成html错误；没有Table，分页在&lt;span&gt;中间也会带来相应的问题；这个还没有很好的解决办法；</p><p><br />还是手动插入分页符比较好琢磨。 <br />主要是怕编辑粘贴的不全。 <br />要是怕半截表格打乱整个页面可以把内容放到&lt;object&gt;&lt;/object&gt;之间试试，如果该页内容里有半个&lt;object&gt;就抱着编辑哭吧。 <br />要是怕最后有半截html标签（型如&lt;td style=&quot;结束的），就用正则去掉试试str=str.replace(/&lt;[^&gt;]*?$/gi,&quot;&quot;)。</p><p>一个Htm长文章分页的例子</p><p>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt; New Document &lt;/TITLE&gt;<br />&lt;META NAME=&quot;Generator&quot; CONTENT=&quot;EditPlus&quot;&gt;<br />&lt;META NAME=&quot;Author&quot; CONTENT=&quot;&quot;&gt;<br />&lt;META NAME=&quot;Keywords&quot; CONTENT=&quot;&quot;&gt;<br />&lt;META NAME=&quot;Description&quot; CONTENT=&quot;&quot;&gt;<br />&lt;style&gt;</p><p>* {<br />font-size:10.2pt;<br />font-family:tahoma;<br />line-height:150%;<br />}<br />.divContent<br />{<br />border:1px solid red;<br />background-color:#FFD2D3;<br />width:500px;<br />word-break:break-all;<br />margin:10px 0px 10px;<br />padding:10px;<br />}</p><p>&lt;/style&gt;<br />&lt;/HEAD&gt;</p><p>&lt;BODY&gt;<br />header<br />&lt;div id=&quot;divPagenation&quot;&gt;&lt;/div&gt;<br />&lt;div id=&quot;divContent&quot;&gt;&lt;/div&gt;<br />footer<br />&lt;SCRIPT LANGUAGE=&quot;JavaScript&quot;&gt;<br />&lt;!--<br />s=&quot;&lt;p&gt;女老师竭力向孩子们证明，学习好功课的重要性。 &lt;/p&gt;&lt;p&gt;她说：&ldquo;牛顿坐在树下，眼睛盯着树在思考，这时，有一个苹果落在他的头上，于是他发现了万有引力定律，孩子们，你们想想看，做一位伟大的科学家多么好，多么神气啊，要想做到这一点，就必须好好学习。&rdquo; &lt;/p&gt;&lt;p&gt;&ldquo;班上一个调皮鬼对此并不满意。他说：&ldquo;兴许是这样，可是，假如他坐在学校里，埋头书本，那他就什么也发现不了啦。&rdquo; &lt;/p&gt;&lt;p&gt;女老师竭力向孩子们证明，学习好功课的重要性。 &lt;/p&gt;&lt;p&gt;她说：&ldquo;牛顿坐在树下，眼睛盯着树在思考，这时，有一个苹果落在他的头上，于是他发现了万有引力定律，孩子们，你们想想看，做一位伟大的科学家多么好，多么神气啊，要想做到这一点，就必须好好学习。&rdquo; &lt;/p&gt;&lt;p&gt;&ldquo;班上一个调皮鬼对此并不满意。他说：&ldquo;兴许是这样，可是，假如他坐在学校里，埋头书本，那他就什么也发现不了啦。&rdquo; &lt;/p&gt;&lt;p&gt;女老师竭力向孩子们证明，学习好功课的重要性。 &lt;/p&gt;&lt;p&gt;她说：&ldquo;牛顿坐在树下，眼睛盯着树在思考，这时，有一个苹果落在他的头上，于是他发现了万有引力定律，孩子们，你们想想看，做一位伟大的科学家多么好，多么神气啊，要想做到这一点，就必须好好学习。&rdquo; &lt;/p&gt;&lt;p&gt;&ldquo;班上一个调皮鬼对此并不满意。他说：&ldquo;兴许是这样，可是，假如他坐在学校里，埋头书本，那他就什么也发现不了啦。&rdquo; &lt;/p&gt;&lt;p&gt;女老师竭力向孩子们证明，学习好功课的重要性。 &lt;/p&gt;&lt;p&gt;她说：&ldquo;牛顿坐在树下，眼睛盯着树在思考，这时，有一个苹果落在他的头上，于是他发现了万有引力定律，孩子们，你们想想看，做一位伟大的科学家多么好，多么神气啊，要想做到这一点，就必须好好学习。&rdquo; &lt;/p&gt;&lt;p&gt;&ldquo;班上一个调皮鬼对此并不满意。他说：&ldquo;兴许是这样，可是，假如他坐在学校里，埋头书本，那他就什么也发现不了啦。&rdquo; &lt;/p&gt;&lt;p&gt;女老师竭力向孩子们证明，学习好功课的重要性。 &lt;/p&gt;&lt;p&gt;她说：&ldquo;牛顿坐在树下，眼睛盯着树在思考，这时，有一个苹果落在他的头上，于是他发现了万有引力定律，孩子们，你们想想看，做一位伟大的科学家多么好，多么神气啊，要想做到这一点，就必须好好学习。&rdquo; &lt;/p&gt;&lt;p&gt;&ldquo;班上一个调皮鬼对此并不满意。他说：&ldquo;兴许是这样，可是，假如他坐在学校里，埋头书本，那他就什么也发现不了啦。&rdquo; &lt;/p&gt;&quot;;<br />function DHTMLpagenation(content){<br />&nbsp;&nbsp;&nbsp; with(this)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // client static html file pagenation<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.content=content;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.contentLength=content.length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageSizeCount;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.perpageLength=100;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //default perpage byte length.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //this.regularExp=/.+[\?\&amp;]{1}page=(\d+)/;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.regularExp=/\d+/;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.divDisplayContent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.contentStyle=null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.strDisplayContent=&quot;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.divDisplayPagenation;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.strDisplayPagenation=&quot;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arguments.length==2?perpageLength=arguments[1]:'';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divExecuteTime=document.createElement(&quot;DIV&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.appendChild(divExecuteTime);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(document.getElementById(&quot;divContent&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divDisplayContent=document.getElementById(&quot;divContent&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divDisplayContent=document.createElement(&quot;DIV&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divDisplayContent.id=&quot;divContent&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.appendChild(divDisplayContent);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(document.getElementById(&quot;divPagenation&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divDisplayPagenation=document.getElementById(&quot;divPagenation&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divDisplayPagenation=document.createElement(&quot;DIV&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divDisplayPagenation.id=&quot;divPagenation&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.appendChild(divDisplayPagenation);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHTMLpagenation.initialize();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />};<br />DHTMLpagenation.initialize=function (){<br />&nbsp;&nbsp;&nbsp; with(this)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divDisplayContent.className=contentStyle!=null?contentStyle:&quot;divContent&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(contentLength&lt;=perpageLength)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDisplayContent=content;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divDisplayContent.innerHTML=strDisplayContent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageSizeCount=Math.ceil((contentLength/perpageLength));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHTMLpagenation.goto(currentPage);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHTMLpagenation.displayContent();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />};<br />DHTMLpagenation.displayPage=function (){<br />&nbsp;&nbsp;&nbsp; with(this)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDisplayPagenation=&quot;分页：&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(currentPage&amp;&amp;currentPage!=1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDisplayPagenation+='&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;DHTMLpagenation.previous()&quot;&gt;上一页&lt;/a&gt;&amp;nbsp;&amp;nbsp;';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDisplayPagenation+=&quot;上一页&amp;nbsp;&amp;nbsp;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=1;i&lt;=pageSizeCount;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i!=currentPage)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDisplayPagenation+='&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;DHTMLpagenation.goto('+i+');&quot;&gt;'+i+'&lt;/a&gt;&amp;nbsp;&amp;nbsp;';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDisplayPagenation+=i+&quot;&amp;nbsp;&amp;nbsp;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(currentPage&amp;&amp;currentPage!=pageSizeCount)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDisplayPagenation+='&lt;a href=&quot;javascript:void(0)&quot; onclick=&quot;DHTMLpagenation.next()&quot;&gt;下一页&lt;/a&gt;&amp;nbsp;&amp;nbsp;';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDisplayPagenation+=&quot;下一页&amp;nbsp;&amp;nbsp;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDisplayPagenation+=&quot;共 &quot;+pageSizeCount+&quot; 页，每页&quot;+perpageLength+&quot; 字符，调整字符数：&lt;input type='text' value='&quot;+perpageLength+&quot;' id='ctlPerpageLength'&gt;&lt;input type='button' value='确定' onclick='DHTMLpagenation.change(document.getElementById(\&quot;ctlPerpageLength\&quot;).value);'&gt;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divDisplayPagenation.innerHTML=strDisplayPagenation;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />};<br />DHTMLpagenation.previous=function (){<br />&nbsp;&nbsp;&nbsp; with(this)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHTMLpagenation.goto(currentPage-1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />};<br />DHTMLpagenation.next=function (){<br />&nbsp;&nbsp;&nbsp; with(this)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHTMLpagenation.goto(currentPage+1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />};<br />DHTMLpagenation.goto=function (iCurrentPage){<br />&nbsp;&nbsp;&nbsp; with(this)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startime=new Date();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(regularExp.test(iCurrentPage))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentPage=iCurrentPage;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strDisplayContent=content.substr((currentPage-1)*perpageLength,perpageLength);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(&quot;page parameter error!&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHTMLpagenation.displayPage();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHTMLpagenation.displayContent();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />};<br />DHTMLpagenation.displayContent=function (){<br />&nbsp;&nbsp;&nbsp; with(this)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divDisplayContent.innerHTML=strDisplayContent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />};<br />DHTMLpagenation.change=function (iPerpageLength){<br />&nbsp;&nbsp;&nbsp; with(this)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(regularExp.test(iPerpageLength))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHTMLpagenation.perpageLength=iPerpageLength;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHTMLpagenation.currentPage=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHTMLpagenation.initialize();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(&quot;请输入数字&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />};</p><p>// method<br />// DHTMLpagenation(strContent,perpageLength)</p><p>DHTMLpagenation(s,100);</p><p>//--&gt;<br />&lt;/script&gt;<br />&lt;/BODY&gt;</p>]]></description><category>JS</category><comments>http://www.augweb.net/blog/post/28.html#comment</comments><wfw:comment>http://www.augweb.net/blog/</wfw:comment><wfw:commentRss>http://www.augweb.net/blog/feed.asp?cmt=28</wfw:commentRss><trackback:ping>http://www.augweb.net/blog/cmd.asp?act=tb&amp;id=28&amp;key=c17cb9a4</trackback:ping></item><item><title>Java正则表达式四种常用功能</title><author>lorrons@gmail.com (lorron)</author><link>http://www.augweb.net/blog/post/27.html</link><pubDate>Sun, 13 Jul 2008 08:09:35 +0800</pubDate><guid>http://www.augweb.net/blog/post/27.html</guid><description><![CDATA[<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f4f68416-a90d-44b1-bd1b-b6c49a64a41b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Tags: <a rel="tag" href="http://www.aiyouji.com/blog/catalog.asp?tags=%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f">正则表达式</a>, <a rel="tag" href="http://www.aiyouji.com/blog/catalog.asp?tags=%e6%ad%a3%e5%88%99">正则</a></div><h5><strong>查询：</strong></h5><p>Java代码</p><ol>    <li>String str=&quot;abc efg ABC&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>String regEx=&quot;a|f&quot;;&nbsp;&nbsp; //表示a或f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>Pattern p=Pattern.compile(regEx);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>Matcher m=p.matcher(str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>boolean rs=m.find();&nbsp;&nbsp;&nbsp;</li></ol><pre>String str=&quot;abc efg ABC&quot;;    String regEx=&quot;a|f&quot;;   //表示a或f     Pattern p=Pattern.compile(regEx);    Matcher m=p.matcher(str);    boolean rs=m.find();  </pre><p><br />如果str中有regEx，那么rs为true，否则为flase。如果想在查找时忽略大小写，则可以写成：</p><p>Java代码</p><ol>    <li>Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);&nbsp;</li></ol><pre>Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);</pre><p><br /><strong>提取：</strong></p><p>Java代码</p><ol>    <li>String regEx=&quot;.+\\\\(.+)$&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>String str=&quot;c:\\dir1\\dir2\\name.txt&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>Pattern p=Pattern.compile(regEx);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>Matcher m=p.matcher(str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>boolean rs=m.find();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>for(int i=1;i&lt;=m.groupCount();i++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp; System.out.println(m.group(i));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>}&nbsp;</li></ol><pre>String regEx=&quot;.+\\\\(.+)$&quot;;    String str=&quot;c:\\dir1\\dir2\\name.txt&quot;;    Pattern p=Pattern.compile(regEx);    Matcher m=p.matcher(str);    boolean rs=m.find();    for(int i=1;i&lt;=m.groupCount();i++){        System.out.println(m.group(i));    }</pre><p><br />以上的执行结果为name.txt，提取的字符串储存在m.group(i)中，其中i最大值为</p><p>Java代码</p><ol>    <li>m.groupCount();&nbsp;</li></ol><pre>m.groupCount();</pre><p><br /><strong>分割：</strong></p><p>Java代码</p><ol>    <li>String regEx=&quot;::&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>Pattern p=Pattern.compile(regEx);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>String[] r=p.split(&quot;xd::abc::cde&quot;);&nbsp;&nbsp;&nbsp;</li></ol><pre>String regEx=&quot;::&quot;;    Pattern p=Pattern.compile(regEx);    String[] r=p.split(&quot;xd::abc::cde&quot;);  </pre><p><br />执行后，r就是{&quot;xd&quot;,&quot;abc&quot;,&quot;cde&quot;}，其实分割时还有更简单的方法：</p><p>Java代码</p><ol>    <li>String str=&quot;xd::abc::cde&quot;;&nbsp;&nbsp;&nbsp;</li>    <li>String[] r=str.split(&quot;::&quot;);&nbsp;</li></ol><pre>String str=&quot;xd::abc::cde&quot;;String[] r=str.split(&quot;::&quot;);</pre><p><br /><strong>替换（删除）：</strong></p><p>Java代码</p><ol>    <li>String regEx=&quot;a+&quot;; //表示一个或多个a&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>Pattern p=Pattern.compile(regEx);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>Matcher m=p.matcher(&quot;aaabbced a ccdeaa&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>String s=m.replaceAll(&quot;A&quot;);&nbsp;&nbsp;&nbsp;&nbsp;</li></ol><pre>String regEx=&quot;a+&quot;; //表示一个或多个a    Pattern p=Pattern.compile(regEx);    Matcher m=p.matcher(&quot;aaabbced a ccdeaa&quot;);    String s=m.replaceAll(&quot;A&quot;);   </pre><p><br />结果为&quot;Abbced A ccdeA&quot; 。如果写成空串，既可达到删除的功能，比如：</p><p>Java代码</p><ol>    <li>String s=m.replaceAll(&quot;&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>结果为&quot;bbced&nbsp; ccde&quot;</li></ol><pre>String s=m.replaceAll(&quot;&quot;);结果为&quot;bbced  ccde&quot;</pre><p><br />附：</p><p>引用</p><p>\d 等於 [0-9] 数字 <br />\D 等於 [^0-9] 非数字 <br />\s 等於 [ \t\n\x0B\f\r] 空白字元 <br />\S 等於 [^ \t\n\x0B\f\r] 非空白字元 <br />\w 等於 [a-zA-Z_0-9] 数字或是英文字 <br />\W 等於 [^a-zA-Z_0-9] 非数字与英文字 <br />^ 表示每行的开头 <br />$ 表示每行的结尾</p>]]></description><category>JS</category><comments>http://www.augweb.net/blog/post/27.html#comment</comments><wfw:comment>http://www.augweb.net/blog/</wfw:comment><wfw:commentRss>http://www.augweb.net/blog/feed.asp?cmt=27</wfw:commentRss><trackback:ping>http://www.augweb.net/blog/cmd.asp?act=tb&amp;id=27&amp;key=8dc9a8a6</trackback:ping></item><item><title>Java正则表达式入门</title><author>lorrons@gmail.com (lorron)</author><link>http://www.augweb.net/blog/post/26.html</link><pubDate>Sun, 13 Jul 2008 08:06:59 +0800</pubDate><guid>http://www.augweb.net/blog/post/26.html</guid><description><![CDATA[<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0e63a605-fddc-4a2a-83a1-34eda085da03" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Tags: <a rel="tag" href="http://www.aiyouji.com/blog/catalog.asp?tags=%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f">正则表达式</a>, <a rel="tag" href="http://www.aiyouji.com/blog/catalog.asp?tags=%e6%ad%a3%e5%88%99">正则</a></div><p>众所周知，在程序开发中，难免会遇到需要匹配、查找、替换、判断字符串的情况发生，而这些情况有时又比较复杂，如果用纯编码方式解决，往往会浪费程序员的时间及精力。因此，学习及使用正则表达式，便成了解决这一矛盾的主要手段。 <br />大家都知道，正则表达式是一种可以用于模式匹配和替换的规范，一个正则表达式就是由普通的字符（例如字符a到z）以及特殊字符（元字符）组成的文字模式，它用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。 <br />自从jdk1.4推出java.util.regex包，就为我们提供了很好的JAVA正则表达式应用平台。 <br />因为正则表达式是一个很庞杂的体系，所以我仅例举些入门的概念，更多的请参阅相关书籍及自行摸索。 <br />\\ 反斜杠 <br />\t 间隔 ('\u0009') <br />\n 换行 ('\u000A') <br />\r 回车 ('\u000D') <br />\d 数字 等价于[0-9] <br />\D 非数字 等价于[^0-9] <br />\s 空白符号 [\t\n\x0B\f\r] <br />\S 非空白符号 [^\t\n\x0B\f\r] <br />\w 单独字符 [a-zA-Z_0-9] <br />\W 非单独字符 [^a-zA-Z_0-9] <br />\f 换页符 <br />\e Escape <br />\b 一个单词的边界 <br />\B 一个非单词的边界 <br />\G 前一个匹配的结束 <br />^为限制开头 <br />^java 条件限制为以Java为开头字符 <br />$为限制结尾 <br />java$ 条件限制为以java为结尾字符 <br />.为限制一个任意字符 <br />java.. 条件限制为java后除换行外任意两个字符 <br />加入特定限制条件「[]」 <br />[a-z] 条件限制在小写a to z范围中一个字符 <br />[A-Z] 条件限制在大写A to Z范围中一个字符 <br />[a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符 <br />[0-9] 条件限制在小写0 to 9范围中一个字符 <br />[0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符 <br />[0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集) <br />[]中加入^后加再次限制条件「[^]」 <br />[^a-z] 条件限制在非小写a to z范围中一个字符 <br />[^A-Z] 条件限制在非大写A to Z范围中一个字符 <br />[^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符 <br />[^0-9] 条件限制在非小写0 to 9范围中一个字符 <br />[^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符 <br />[^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集) <br />在限制条件为特定字符出现0次以上时，可以使用「*」 <br />J* 0个以上J <br />.* 0个以上任意字符 <br />J.*D J与D之间0个以上任意字符 <br />在限制条件为特定字符出现1次以上时，可以使用「+」 <br />J+ 1个以上J <br />.+ 1个以上任意字符 <br />J.+D J与D之间1个以上任意字符 <br />在限制条件为特定字符出现有0或1次以上时，可以使用「?」 <br />JA? J或者JA出现 <br />限制为连续出现指定次数字符「{a}」 <br />J{2} JJ <br />J{3} JJJ <br />文字a个以上，并且「{a,}」 <br />J{3,} JJJ,JJJJ,JJJJJ,???(3次以上J并存) <br />文字个以上，b个以下「{a,b}」 <br />J{3,5} JJJ或JJJJ或JJJJJ <br />两者取一「|」 <br />J|A J或A <br />Java|Hello Java或Hello <br />「()」中规定一个组合类型 <br />比如，我查询&lt;a href=\&quot;index.html\&quot;&gt;index&lt;/a&gt;中&lt;a href&gt;&lt;/a&gt;间的数据，可写作&lt;a.*href=\&quot;.*\&quot;&gt;(.+?)&lt;/a&gt; <br />在使用Pattern.compile函数时，可以加入控制正则表达式的匹配行为的参数： <br />Pattern Pattern.compile(String regex, int flag) <br />flag的取值范围如下： <br />Pattern.CANON_EQ 当且仅当两个字符的&quot;正规分解(canonical decomposition)&quot;都完全相同的情况下，才认定匹配。比如用了这个标志之后，表达式&quot;a\u030A&quot;会匹配&quot;?&quot;。默认情况下，不考虑&quot;规范相等性(canonical equivalence)&quot;。 <br />Pattern.CASE_INSENSITIVE(?i) 默认情况下，大小写不明感的匹配只适用于US-ASCII字符集。这个标志能让表达式忽略大小写进行匹配。要想对Unicode字符进行大小不明感的匹配，只要将UNICODE_CASE与这个标志合起来就行了。 <br />Pattern.COMMENTS(?x) 在这种模式下，匹配时会忽略(正则表达式里的)空格字符(译者注：不是指表达式里的&quot;\\s&quot;，而是指表达式里的空格，tab，回车之类)。注释从#开始，一直到这行结束。可以通过嵌入式的标志来启用Unix行模式。 <br />Pattern.DOTALL(?s) 在这种模式下，表达式'.'可以匹配任意字符，包括表示一行的结束符。默认情况下，表达式'.'不匹配行的结束符。 <br />Pattern.MULTILINE <br />(?m) 在这种模式下，'^'和'$'分别匹配一行的开始和结束。此外，'^'仍然匹配字符串的开始，'$'也匹配字符串的结束。默认情况下，这两个表达式仅仅匹配字符串的开始和结束。 <br />Pattern.UNICODE_CASE <br />(?u) 在这个模式下，如果你还启用了CASE_INSENSITIVE标志，那么它会对Unicode字符进行大小写不明感的匹配。默认情况下，大小写不敏感的匹配只适用于US-ASCII字符集。 <br />Pattern.UNIX_LINES(?d) 在这个模式下，只有'\n'才被认作一行的中止，并且与'.'，'^'，以及'$'进行匹配。 <br />抛开空泛的概念，下面写出几个简单的Java正则用例： <br />◆比如，在字符串包含验证时 <br />//查找以Java开头,任意结尾的字符串</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>Pattern pattern = Pattern.compile(&quot;^Java.*&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>Matcher matcher = pattern.matcher(&quot;Java不是人&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>boolean b= matcher.matches();&nbsp;</li></ol><pre>  Pattern pattern = Pattern.compile(&quot;^Java.*&quot;);  Matcher matcher = pattern.matcher(&quot;Java不是人&quot;);  boolean b= matcher.matches();</pre><p><br />//当条件满足时，将返回true，否则返回false</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>System.out.println(b);&nbsp;</li></ol><pre>  System.out.println(b);</pre><p><br />◆以多条件分割字符串时</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>Pattern pattern = Pattern.compile(&quot;[, |]+&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>String[] strs = pattern.split(&quot;Java Hello World&nbsp; Java,Hello,,World|Sun&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>for (int i=0;i&lt;strs.length;i++) {&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp; System.out.println(strs[i]);&nbsp;&nbsp;&nbsp;</li>    <li>}&nbsp;&nbsp;</li></ol><pre>Pattern pattern = Pattern.compile(&quot;[, |]+&quot;);String[] strs = pattern.split(&quot;Java Hello World  Java,Hello,,World|Sun&quot;);for (int i=0;i&lt;strs.length;i++) {    System.out.println(strs[i]);} </pre><p><br />◆文字替换（首次出现字符）</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>Pattern pattern = Pattern.compile(&quot;正则表达式&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>Matcher matcher = pattern.matcher(&quot;正则表达式 Hello World,正则表达式 Hello World&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>//替换第一个符合正则的数据</li>    <li>System.out.println(matcher.replaceFirst(&quot;Java&quot;));&nbsp;</li></ol><pre>Pattern pattern = Pattern.compile(&quot;正则表达式&quot;);Matcher matcher = pattern.matcher(&quot;正则表达式 Hello World,正则表达式 Hello World&quot;);//替换第一个符合正则的数据System.out.println(matcher.replaceFirst(&quot;Java&quot;));</pre><p><br />◆文字替换（全部）</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>Pattern pattern = Pattern.compile(&quot;正则表达式&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>Matcher matcher = pattern.matcher(&quot;正则表达式 Hello World,正则表达式 Hello World&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>//替换第一个符合正则的数据</li>    <li>System.out.println(matcher.replaceAll(&quot;Java&quot;));&nbsp;</li></ol><pre>Pattern pattern = Pattern.compile(&quot;正则表达式&quot;);Matcher matcher = pattern.matcher(&quot;正则表达式 Hello World,正则表达式 Hello World&quot;);//替换第一个符合正则的数据System.out.println(matcher.replaceAll(&quot;Java&quot;));</pre><p><br />◆文字替换（置换字符）</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>Pattern pattern = Pattern.compile(&quot;正则表达式&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>Matcher matcher = pattern.matcher(&quot;正则表达式 Hello World,正则表达式 Hello World &quot;);&nbsp;&nbsp;&nbsp;</li>    <li>StringBuffer sbr = new StringBuffer();&nbsp;&nbsp;&nbsp;</li>    <li>while (matcher.find()) {&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp; matcher.appendReplacement(sbr, &quot;Java&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>}&nbsp;&nbsp;&nbsp;</li>    <li>matcher.appendTail(sbr);&nbsp;&nbsp;&nbsp;</li>    <li>System.out.println(sbr.toString());&nbsp;</li></ol><pre>Pattern pattern = Pattern.compile(&quot;正则表达式&quot;);Matcher matcher = pattern.matcher(&quot;正则表达式 Hello World,正则表达式 Hello World &quot;);StringBuffer sbr = new StringBuffer();while (matcher.find()) {    matcher.appendReplacement(sbr, &quot;Java&quot;);}matcher.appendTail(sbr);System.out.println(sbr.toString());</pre><p><br />◆验证是否为邮箱地址</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>String str=&quot;ceponline@yahoo.com.cn&quot;;&nbsp;&nbsp;&nbsp;</li>    <li>Pattern pattern = Pattern.compile(&quot;[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+&quot;,Pattern.CASE_INSENSITIVE);&nbsp;&nbsp;&nbsp;</li>    <li>Matcher matcher = pattern.matcher(str);&nbsp;&nbsp;&nbsp;</li>    <li>System.out.println(matcher.matches());&nbsp;</li></ol><pre>String str=&quot;ceponline@yahoo.com.cn&quot;;Pattern pattern = Pattern.compile(&quot;[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+&quot;,Pattern.CASE_INSENSITIVE);Matcher matcher = pattern.matcher(str);System.out.println(matcher.matches());</pre><p><br />◆去除html标记</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>Pattern pattern = Pattern.compile(&quot;&lt;.+?&gt;&quot;, Pattern.DOTALL);&nbsp;&nbsp;&nbsp;</li>    <li>Matcher matcher = pattern.matcher(&quot;&lt;a href=\&quot;index.html\&quot;&gt;主页&lt;/a&gt;&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>String string = matcher.replaceAll(&quot;&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>System.out.println(string);&nbsp;</li></ol><pre>Pattern pattern = Pattern.compile(&quot;&lt;.+?&gt;&quot;, Pattern.DOTALL);Matcher matcher = pattern.matcher(&quot;&lt;a href=\&quot;index.html\&quot;&gt;主页&lt;/a&gt;&quot;);String string = matcher.replaceAll(&quot;&quot;);System.out.println(string);</pre><p><br />◆查找html中对应条件字符串</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>Pattern pattern = Pattern.compile(&quot;href=\&quot;(.+?)\&quot;&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>Matcher matcher = pattern.matcher(&quot;&lt;a href=\&quot;index.html\&quot;&gt;主页&lt;/a&gt;&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>if(matcher.find())&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp; System.out.println(matcher.group(1));&nbsp;&nbsp;&nbsp;</li>    <li>}&nbsp;</li></ol><pre>Pattern pattern = Pattern.compile(&quot;href=\&quot;(.+?)\&quot;&quot;);Matcher matcher = pattern.matcher(&quot;&lt;a href=\&quot;index.html\&quot;&gt;主页&lt;/a&gt;&quot;);if(matcher.find())  System.out.println(matcher.group(1));}</pre><p><br />◆截取http://地址 <br />//截取url</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>Pattern pattern = Pattern.compile(&quot;(http://|https://){1}[\\w\\.\\-/:]+&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>Matcher matcher = pattern.matcher(&quot;dsdsds&lt;http://dsds//gfgffdfd&gt;fdf&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>StringBuffer buffer = new StringBuffer();&nbsp;&nbsp;&nbsp;</li>    <li>while(matcher.find()){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp; buffer.append(matcher.group());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp; buffer.append(&quot;\r\n&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>System.out.println(buffer.toString());&nbsp;&nbsp;&nbsp;</li>    <li>}&nbsp;</li></ol><pre>Pattern pattern = Pattern.compile(&quot;(http://|https://){1}[\\w\\.\\-/:]+&quot;);Matcher matcher = pattern.matcher(&quot;dsdsds&lt;http://dsds//gfgffdfd&gt;fdf&quot;);StringBuffer buffer = new StringBuffer();while(matcher.find()){                  buffer.append(matcher.group());            buffer.append(&quot;\r\n&quot;);              System.out.println(buffer.toString());}</pre><p><br />◆替换指定{}中文字</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>String str = &quot;Java目前的发展史是由{0}年-{1}年&quot;;&nbsp;&nbsp;&nbsp;</li>    <li>String[][] object={new String[]{&quot;\\{0\\}&quot;,&quot;1995&quot;},new String[]{&quot;\\{1\\}&quot;,&quot;2007&quot;}};&nbsp;&nbsp;&nbsp;</li>    <li>System.out.println(replace(str,object));&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;</li>    <li>public static String replace(final String sourceString,Object[] object) {&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String temp=sourceString;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>for(int i=0;i&lt;object.length;i++){&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] result=(String[])object[i];&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pattern&nbsp;&nbsp;&nbsp; pattern = Pattern.compile(result[0]);&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matcher matcher = pattern.matcher(temp);&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp=matcher.replaceAll(result[1]);&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</li>    <li>return temp;&nbsp;&nbsp;&nbsp;</li>    <li>}&nbsp;</li></ol><pre>String str = &quot;Java目前的发展史是由{0}年-{1}年&quot;;String[][] object={new String[]{&quot;\\{0\\}&quot;,&quot;1995&quot;},new String[]{&quot;\\{1\\}&quot;,&quot;2007&quot;}};System.out.println(replace(str,object));public static String replace(final String sourceString,Object[] object) {            String temp=sourceString;                for(int i=0;i&lt;object.length;i++){                      String[] result=(String[])object[i];               Pattern    pattern = Pattern.compile(result[0]);               Matcher matcher = pattern.matcher(temp);               temp=matcher.replaceAll(result[1]);            }            return temp;}</pre><p><br />◆以正则条件查询指定目录下文件</p><p>Java代码 <a href="http://wing929.javaeye.com/blog/187340#"><img alt="复制代码" src="http://wing929.javaeye.com/images/icon_copy.gif" /></a></p><ol>    <li>//用于缓存文件列表</li>    <li>private ArrayList files = new ArrayList();&nbsp;&nbsp;&nbsp;</li>    <li>//用于承载文件路径</li>    <li>private String _path;&nbsp;&nbsp;&nbsp;</li>    <li>//用于承载未合并的正则公式</li>    <li>private String _regexp;&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;</li>    <li>class MyFileFilter implements FileFilter {&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;</li>    <li>/**</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 匹配文件名称</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</li>    <li>public boolean accept(File file) {&nbsp;&nbsp;&nbsp;</li>    <li>try {&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pattern pattern = Pattern.compile(_regexp);&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Matcher match = pattern.matcher(file.getName());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>return match.matches();&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {&nbsp;&nbsp;&nbsp;</li>    <li>return true;&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;</li>    <li>/**</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 解析输入流</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param inputs</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilesAnalyze (String path,String regexp){&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getFileName(path,regexp);&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;</li>    <li>/**</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 分析文件名并加入files</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param input</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</li>    <li>private void getFileName(String path,String regexp) {&nbsp;&nbsp;&nbsp;</li>    <li>//目录</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _path=path;&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _regexp=regexp;&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File directory = new File(_path);&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File[] filesFile = directory.listFiles(new MyFileFilter());&nbsp;&nbsp;&nbsp;</li>    <li>if (filesFile == null) return;&nbsp;&nbsp;&nbsp;</li>    <li>for (int j = 0; j &lt; filesFile.length; j++) {&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; files.add(filesFile[j]);&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</li>    <li>return;&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;</li>    <li>/**</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 显示输出信息</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param out</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</li>    <li>public void print (PrintStream out) {&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator elements = files.iterator();&nbsp;&nbsp;&nbsp;</li>    <li>while (elements.hasNext()) {&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File file=(File) elements.next();&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(file.getPath());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;</li>    <li>public static void output(String path,String regexp) {&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileGroup1.print(System.out);&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;</li>    <li>public static void main (String[] args) {&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output(&quot;C:\\&quot;,&quot;[A-z|.]*&quot;);&nbsp;&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;</li></ol><pre> //用于缓存文件列表        private ArrayList files = new ArrayList();        //用于承载文件路径        private String _path;        //用于承载未合并的正则公式        private String _regexp;                class MyFileFilter implements FileFilter {              /**               * 匹配文件名称               */              public boolean accept(File file) {                try {                  Pattern pattern = Pattern.compile(_regexp);                  Matcher match = pattern.matcher(file.getName());                                  return match.matches();                } catch (Exception e) {                  return true;                }              }            }                /**         * 解析输入流         * @param inputs         */        FilesAnalyze (String path,String regexp){            getFileName(path,regexp);        }                /**         * 分析文件名并加入files         * @param input         */        private void getFileName(String path,String regexp) {            //目录              _path=path;              _regexp=regexp;              File directory = new File(_path);              File[] filesFile = directory.listFiles(new MyFileFilter());              if (filesFile == null) return;              for (int j = 0; j &lt; filesFile.length; j++) {                files.add(filesFile[j]);              }              return;            }            /**         * 显示输出信息         * @param out         */        public void print (PrintStream out) {            Iterator elements = files.iterator();            while (elements.hasNext()) {                File file=(File) elements.next();                    out.println(file.getPath());                }        }        public static void output(String path,String regexp) {            FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);            fileGroup1.print(System.out);        }            public static void main (String[] args) {            output(&quot;C:\\&quot;,&quot;[A-z|.]*&quot;);        }</pre><p><br />Java正则的功用还有很多，事实上只要是字符处理，就没有正则做不到的事情存在。（当然，正则解释时较耗时间就是了|||&hellip;&hellip;）</p>]]></description><category>JS</category><comments>http://www.augweb.net/blog/post/26.html#comment</comments><wfw:comment>http://www.augweb.net/blog/</wfw:comment><wfw:commentRss>http://www.augweb.net/blog/feed.asp?cmt=26</wfw:commentRss><trackback:ping>http://www.augweb.net/blog/cmd.asp?act=tb&amp;id=26&amp;key=acc87c99</trackback:ping></item><item><title>常用的正则表达式</title><author>lorrons@gmail.com (lorron)</author><link>http://www.augweb.net/blog/post/25.html</link><pubDate>Sun, 13 Jul 2008 08:04:16 +0800</pubDate><guid>http://www.augweb.net/blog/post/25.html</guid><description><![CDATA[<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2bcffe5c-21f9-49f5-ac7b-2a3dd545fd75" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Tags: <a rel="tag" href="http://www.aiyouji.com/blog/catalog.asp?tags=%e6%ad%a3%e5%88%99">正则</a>, <a rel="tag" href="http://www.aiyouji.com/blog/catalog.asp?tags=%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f">正则表达式</a></div><p>&quot;^\d+$&quot;　　//非负整数（正整数 + 0） <br />&quot;^[0-9]*[1-9][0-9]*$&quot;　　//正整数 <br />&quot;^((-\d+)|(0+))$&quot;　　//非正整数（负整数 + 0） <br />&quot;^-[0-9]*[1-9][0-9]*$&quot;　　//负整数 <br />&quot;^-?\d+$&quot;　　　　//整数 <br />&quot;^\d+(\.\d+)?$&quot;　　//非负浮点数（正浮点数 + 0） <br />&quot;^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$&quot;　　//正浮点数 <br />&quot;^((-\d+(\.\d+)?)|(0+(\.0+)?))$&quot;　　//非正浮点数（负浮点数 + 0） <br />&quot;^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$&quot;　　//负浮点数 <br />&quot;^(-?\d+)(\.\d+)?$&quot;　　//浮点数 <br />&quot;^[A-Za-z]+$&quot;　　//由26个英文字母组成的字符串 <br />&quot;^[A-Z]+$&quot;　　//由26个英文字母的大写组成的字符串 <br />&quot;^[a-z]+$&quot;　　//由26个英文字母的小写组成的字符串 <br />&quot;^[A-Za-z0-9]+$&quot;　　//由数字和26个英文字母组成的字符串 <br />&quot;^\w+$&quot;　　//由数字、26个英文字母或者下划线组成的字符串 <br />&quot;^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$&quot;　　　　//email地址 <br />&quot;^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$&quot;　　//url <br />/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 <br />/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 <br />&quot;^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$&quot; //Emil <br />&quot;(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?&quot; //电话号码 <br />&quot;^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$&quot; //IP地址 <br />匹配中文字符的正则表达式： [\u4e00-\u9fa5] <br />匹配双字节字符(包括汉字在内)：[^\x00-\xff] <br />匹配空行的正则表达式：\n[\s| ]*\r <br />匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/ <br />匹配首尾空格的正则表达式：(^\s*)|(\s*$) <br />匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* <br />匹配网址URL的正则表达式：^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ <br />匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$ <br />匹配国内电话号码：(\d{3}-|\d{4}-)?(\d{8}|\d{7})? <br />匹配腾讯QQ号：^[1-9]*[1-9][0-9]*$ <br />下表是元字符及其在正则表达式上下文中的行为的一个完整列表： <br />\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。 <br />^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性，^ 也匹配 &rsquo;\n&rsquo; 或 &rsquo;\r&rsquo; 之后的位置。 <br />$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性，$ 也匹配 &rsquo;\n&rsquo; 或 &rsquo;\r&rsquo; 之前的位置。 <br />* 匹配前面的子表达式零次或多次。 <br />+ 匹配前面的子表达式一次或多次。+ 等价于 {1,}。 <br />? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。 <br />{n} n 是一个非负整数，匹配确定的n 次。 <br />{n,} n 是一个非负整数，至少匹配n 次。 <br />{n,m} m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。 <br />? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。 <br />. 匹配除 &quot;\n&quot; 之外的任何单个字符。要匹配包括 &rsquo;\n&rsquo; 在内的任何字符，请使用象 &rsquo;[.\n]&rsquo; 的模式。 <br />(pattern) 匹配pattern 并获取这一匹配。 <br />(?:pattern) 匹配pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。 <br />(?=pattern) 正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。 <br />(?!pattern) 负向预查，与(?=pattern)作用相反 <br />x|y 匹配 x 或 y。 <br />[xyz] 字符集合。 <br />[^xyz] 负值字符集合。 <br />[a-z] 字符范围，匹配指定范围内的任意字符。 <br />[^a-z] 负值字符范围，匹配任何不在指定范围内的任意字符。 <br />\b 匹配一个单词边界，也就是指单词和空格间的位置。 <br />\B 匹配非单词边界。 <br />\cx 匹配由x指明的控制字符。 <br />\d 匹配一个数字字符。等价于 [0-9]。 <br />\D 匹配一个非数字字符。等价于 [^0-9]。 <br />\f 匹配一个换页符。等价于 \x0c 和 \cL。 <br />\n 匹配一个换行符。等价于 \x0a 和 \cJ。 <br />\r 匹配一个回车符。等价于 \x0d 和 \cM。 <br />\s 匹配任何空白字符，包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。 <br />\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 <br />\t 匹配一个制表符。等价于 \x09 和 \cI。 <br />\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。 <br />\w 匹配包括下划线的任何单词字符。等价于&rsquo;[A-Za-z0-9_]&rsquo;。 <br />\W 匹配任何非单词字符。等价于 &rsquo;[^A-Za-z0-9_]&rsquo;。 <br />\xn 匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。 <br />\num 匹配 num，其中num是一个正整数。对所获取的匹配的引用。 <br />\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为后向引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。 <br />\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式，则 nm 为后向引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。 <br />\nml 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。 <br />\un 匹配 n，其中 n 是一个用四个十六进制数字表示的Unicode字符。 <br />匹配中文字符的正则表达式： [u4e00-u9fa5] <br />匹配双字节字符(包括汉字在内)：[^x00-xff] <br />应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1） <br />String.prototype.len=function(){return this.replace([^x00-xff]/g,&quot;aa&quot;).length;} <br />匹配空行的正则表达式：n[s| ]*r <br />匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;/1&gt;|&lt;(.*) /&gt;/ <br />匹配首尾空格的正则表达式：(^s*)|(s*$) <br />应用：javascript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现，如下： <br />String.prototype.trim = function() <br />{ <br />return this.replace(/(^s*)|(s*$)/g, &quot;&quot;); <br />} <br />利用正则表达式分解和转换IP地址： <br />下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的Javascript程序： <br />function IP2V(ip) <br />{ <br />re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式 <br />if(re.test(ip)) <br />{ <br />return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1 <br />} <br />else <br />{ <br />throw new Error(&quot;Not a valid IP address!&quot;) <br />} <br />} <br />不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下： <br />var ip=&quot;10.100.20.168&quot; <br />ip=ip.split(&quot;.&quot;) <br />alert(&quot;IP值是：&quot;+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1)) <br />匹配Email地址的正则表达式：w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* <br />匹配网址URL的正则表达式：http://([w-]+.)+[w-]+(/[w- ./?%&amp;=]*)? <br />利用正则表达式去除字串中重复的字符的算法程序： <br />var s=&quot;abacabefgeeii&quot; <br />var s1=s.replace(/(.).*1/g,&quot;$1&quot;) <br />var re=new RegExp(&quot;[&quot;+s1+&quot;]&quot;,&quot;g&quot;) <br />var s2=s.replace(re,&quot;&quot;) <br />alert(s1+s2) //结果为：abcefgi <br />我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法，最终没有找到，这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符，再以重复的字符建立第二个表达式，取到不重复的字符，两者串连。这个方法对于字符顺序有要求的字符串可能不适用。 <br />得用正则表达式从URL地址中提取文件名的javascript程序，如下结果为page1 <br />s=&quot;http://www.9499.net/page1.htm&quot; <br />s=s.replace(/(.*/){0,}([^.]+).*/ig,&quot;$2&quot;) <br />alert(s) <br />利用正则表达式限制网页表单里的文本框输入内容： <br />用正则表达式限制只能输入中文：onkeyup=&quot;value=value.replace(/[^u4E00-u9FA5]/g,'')&quot; onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))&quot; <br />用正则表达式限制只能输入全角字符： onkeyup=&quot;value=value.replace(/[^uFF00-uFFFF]/g,'')&quot; onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))&quot; <br />用正则表达式限制只能输入数字：onkeyup=&quot;value=value.replace(/[^d]/g,'') &quot;onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))&quot; <br />用正则表达式限制只能输入数字和英文：onkeyup=&quot;value=value.replace(/[W]/g,'') &quot;onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))&quot;</p>]]></description><category>JS</category><comments>http://www.augweb.net/blog/post/25.html#comment</comments><wfw:comment>http://www.augweb.net/blog/</wfw:comment><wfw:commentRss>http://www.augweb.net/blog/feed.asp?cmt=25</wfw:commentRss><trackback:ping>http://www.augweb.net/blog/cmd.asp?act=tb&amp;id=25&amp;key=0e16bbba</trackback:ping></item><item><title>密码强度测试</title><author>lorrons@gmail.com (lorron)</author><link>http://www.augweb.net/blog/post/12.html</link><pubDate>Tue, 01 Jul 2008 21:36:05 +0800</pubDate><guid>http://www.augweb.net/blog/post/12.html</guid><description><![CDATA[[CODE=html] <br/><br/><head><br/><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><br/><title>密码强度测试</title><br/></head><br/><script language="JavaScript"><br/><br/><!--<br/>function checkIntensity(pwd)<br/>{<br/>  var Mcolor = "#FFF",Lcolor = "#FFF",Hcolor = "#FFF";<br/>  var m=0;<br/><br/>  var Modes = 0;<br/>  for (i=0; i<pwd.length; i++)<br/>  {<br/>    var charType = 0;<br/>    var t = pwd.charCodeAt(i);<br/>    if (t>=48 && t <=57)//0~9<br/>    {<br/>      charType = 1;<br/>    }<br/>    else if (t>=65 && t <=90)//a~z<br/>    {<br/>      charType = 2;<br/>    }<br/>    else if (t>=97 && t <=122)//A~Z<br/>      charType = 4;<br/>    else<br/>      charType = 4;<br/>    Modes =Modes | charType;<br/>  }<br/><br/>  for (i=0;i<4;i++)<br/>  {<br/>    if (Modes & 1) m++;<br/>      Modes=Modes>>>1;<br/>  }<br/><br/>  if (pwd.length<=4)<br/>  {<br/>    m = 1;<br/>  }<br/><br/>  switch(m)<br/>  {<br/>    case 1 :<br/>      Lcolor = "2px solid red";<br/>      Mcolor = Hcolor = "2px solid #DADADA";<br/>    break;<br/>    case 2 :<br/>      Mcolor = "2px solid #f90";<br/>      Lcolor = Hcolor = "2px solid #DADADA";<br/>    break;<br/>    case 3 :<br/>      Hcolor = "2px solid #3c0";<br/>      Lcolor = Mcolor = "2px solid #DADADA";<br/>    break;<br/>    case 4 :<br/>      Hcolor = "2px solid #3c0";<br/>      Lcolor = Mcolor = "2px solid #DADADA";<br/>    break;<br/>    default :<br/>      Hcolor = Mcolor = Lcolor = "";<br/>    break;<br/>  }<br/>  document.getElementById("pwd_lower").style.borderBottom  = Lcolor;<br/>  document.getElementById("pwd_middle").style.borderBottom = Mcolor;<br/>  document.getElementById("pwd_high").style.borderBottom   = Hcolor;<br/><br/>}<br/>//--><br/><br/></script><br/><br/><input type="password" name="password" onChange="checkIntensity(this.value)" /><br/><table width="170" border="0" cellspacing="0" cellpadding="0">    <tbody>        <tr>            <td id="pwd_lower" style="border-bottom:2px solid #DADADA">&nbsp;</td>            <td style="border-bottom:2px solid #DADADA; width:2px">&nbsp;</td>            <td id="pwd_middle" style="border-bottom:2px solid #DADADA">&nbsp;</td>            <td style="border-bottom:2px solid #DADADA; width:2px">&nbsp;</td>            <td id="pwd_high"  style="border-bottom:2px solid #DADADA">&nbsp;</td>        </tr>    </tbody></table><br/><br/>[/CODE]]]></description><category>JS</category><comments>http://www.augweb.net/blog/post/12.html#comment</comments><wfw:comment>http://www.augweb.net/blog/</wfw:comment><wfw:commentRss>http://www.augweb.net/blog/feed.asp?cmt=12</wfw:commentRss><trackback:ping>http://www.augweb.net/blog/cmd.asp?act=tb&amp;id=12&amp;key=adf2eac5</trackback:ping></item></channel></rss>
