<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>71街 &#187; 正则表达式</title>
	<atom:link href="http://www.71j.cn/archives/tag/%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f/feed" rel="self" type="application/rss+xml" />
	<link>http://www.71j.cn</link>
	<description>杜工的技术博客</description>
	<lastBuildDate>Fri, 16 Dec 2011 03:52:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>我也收集了一些常用的正则表达式</title>
		<link>http://www.71j.cn/archives/28</link>
		<comments>http://www.71j.cn/archives/28#comments</comments>
		<pubDate>Tue, 01 Sep 2009 09:54:16 +0000</pubDate>
		<dc:creator>杜工</dc:creator>
				<category><![CDATA[分享]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[正则表达式]]></category>

		<guid isPermaLink="false">http://71j.cn/?p=28</guid>
		<description><![CDATA[兄弟姊妹们，这可是极品文章，强烈建议大家收藏，以后不用每次都费劲脑汁编正则表达式了！ 匹配中文字符的正则表达式： [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内)：[^\x00-\xff] 应用：计... ]]></description>
			<content:encoded><![CDATA[<p>兄弟姊妹们，这可是极品文章，强烈建议大家收藏，以后不用每次都费劲脑汁编正则表达式了！<br />
匹配中文字符的正则表达式： [\u4e00-\u9fa5]</p>
<p>匹配双字节字符(包括汉字在内)：[^\x00-\xff]</p>
<p>应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">len</span><span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">^</span>\x00<span style="color: #339933;">-</span>\xff<span style="color: #009900;">&#93;</span><span style="color: #339933;">/</span>g<span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;aa&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>匹配空行的正则表达式：\n[\s| ]*\r</p>
<p>匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/</p>
<p>匹配首尾空格的正则表达式：(^\s*)|(\s*$)</p>
<p>应用：javascript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现，如下：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">trim</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/(^\s*)|(\s*$)/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>利用正则表达式分解和转换IP地址：</p>
<p>下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的javascript程序：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> IP2V<span style="color: #009900;">&#40;</span>ip<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
re<span style="color: #339933;">=</span><span style="color: #009966; font-style: italic;">/(\d+)\.(\d+)\.(\d+)\.(\d+)/g</span> <span style="color: #006600; font-style: italic;">//匹配IP地址的正则表达式</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>re.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>ip<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">return</span> RegExp.$1<span style="color: #339933;">*</span>Math.<span style="color: #660066;">pow</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">255</span><span style="color: #339933;">,</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>RegExp.$2<span style="color: #339933;">*</span>Math.<span style="color: #660066;">pow</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">255</span><span style="color: #339933;">,</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>RegExp.$3<span style="color: #339933;">*</span><span style="color: #CC0000;">255</span><span style="color: #339933;">+</span>RegExp.$4<span style="color: #339933;">*</span><span style="color: #CC0000;">1</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">else</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #003366; font-weight: bold;">new</span> Error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Not a valid IP address!&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> ip<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;10.100.20.168&quot;</span>
ip<span style="color: #339933;">=</span>ip.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;IP值是：&quot;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>ip<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">255</span><span style="color: #339933;">*</span><span style="color: #CC0000;">255</span><span style="color: #339933;">*</span><span style="color: #CC0000;">255</span><span style="color: #339933;">+</span>ip<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">255</span><span style="color: #339933;">*</span><span style="color: #CC0000;">255</span><span style="color: #339933;">+</span>ip<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">255</span><span style="color: #339933;">+</span>ip<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*</p>
<p>匹配网址URL的正则表达式：http://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?</p>
<p>利用正则表达式去除字串中重复的字符的算法程序：[注：此程序不正确，原因见本贴回复]</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> s<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;abacabefgeeii&quot;</span>
<span style="color: #003366; font-weight: bold;">var</span> s1<span style="color: #339933;">=</span>s.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/(.).*\1/g</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;$1&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #003366; font-weight: bold;">var</span> re<span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;[&quot;</span><span style="color: #339933;">+</span>s1<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;]&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;g&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #003366; font-weight: bold;">var</span> s2<span style="color: #339933;">=</span>s.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span>re<span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>s1<span style="color: #339933;">+</span>s2<span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//结果为：abcefgi</span></pre></div></div>

<p>我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法，最终没有找到，这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符，再以重复的字符建立第二个表达式，取到不重复的字符，两者串连。这个方法对于字符顺序有要求的字符串可能不适用。</p>
<p>得用正则表达式从URL地址中提取文件名的javascript程序，如下结果为page1</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">s<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://www.71j.cn/page1.htm&quot;</span>
s<span style="color: #339933;">=</span>s.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/(.*\/){0,}([^\.]+).*/ig</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;$2&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span></pre></div></div>

<p>利用正则表达式限制网页表单里的文本框输入内容：</p>
<p>用正则表达式限制只能输入中文：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">onkeyup<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;value=value.replace(/[^<span style="color: #000099; font-weight: bold;">\u</span>4E00-<span style="color: #000099; font-weight: bold;">\u</span>9FA5]/g,'')&quot;</span> onbeforepaste<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^<span style="color: #000099; font-weight: bold;">\u</span>4E00-<span style="color: #000099; font-weight: bold;">\u</span>9FA5]/g,''))&quot;</span></pre></div></div>

<p>用正则表达式限制只能输入全角字符：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"> onkeyup<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;value=value.replace(/[^<span style="color: #000099; font-weight: bold;">\u</span>FF00-<span style="color: #000099; font-weight: bold;">\u</span>FFFF]/g,'')&quot;</span> onbeforepaste<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^<span style="color: #000099; font-weight: bold;">\u</span>FF00-<span style="color: #000099; font-weight: bold;">\u</span>FFFF]/g,''))&quot;</span></pre></div></div>

<p>用正则表达式限制只能输入数字：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">onkeyup<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;value=value.replace(/[^<span style="color: #000099; font-weight: bold;">\d</span>]/g,'') &quot;</span>onbeforepaste<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^<span style="color: #000099; font-weight: bold;">\d</span>]/g,''))&quot;</span></pre></div></div>

<p>用正则表达式限制只能输入数字和英文：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">onkeyup<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;value=value.replace(/[<span style="color: #000099; font-weight: bold;">\W</span>]/g,'') &quot;</span>onbeforepaste<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^<span style="color: #000099; font-weight: bold;">\d</span>]/g,''))&quot;</span></pre></div></div>

<p>判断是否为数字</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> isNumber<span style="color: #009900;">&#40;</span>oNum<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>oNum<span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> strP<span style="color: #339933;">=</span><span style="color: #009966; font-style: italic;">/^\d+(\.\d+)?$/</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>strP.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>oNum<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>parseFloat<span style="color: #009900;">&#40;</span>oNum<span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span>oNum<span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>ex<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.71j.cn/archives/28/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

