先说几句闲话:
我是一个菜鸟级程序员,属于苯鸟类。长时间来一直在门外打转,却入不得门去。灰心、郁闷。这篇文章也基本是从帮助文档上抄下来的。不对的地方还请高手多多指教,欢迎多多批评。好了,闲话少说。开始。。。
一、正则表达式是什么?为什么要用正则表达式?
你在开发Html表单时是否经常为验证某个用户填入的字段是否符合某种格式而写过一段一段的程序: 又长又臭。比如:验证用户输入的值是否为一个合格的E-Mail地址、是否为一个合适的日期等等。如果你掌握了正则表达式,你将无尽的感叹他的简洁与准确。为了证明我的说法,顺便在CSND上摘了两段程序,孰优孰劣你自己判断吧:
未使用正则表达式:
//函数名:chksafe
//功能介绍:检查是否含有"'",'\\',"/"
//参数说明:要检查的字符串
//返回值:0:是 1:不是
function chksafe(a)
{
fibdn = new Array ("'" ,"\\", "、", ",", ";", "/");
i=fibdn.length;
j=a.length;
for (ii=0;ii<i;ii++)
{ for (jj=0;jj<j;jj++)
{ temp1=a.charAt(jj);
temp2=fibdn[ii];
if (tem';p1==temp2)
{ return 0; }
}
}
return 1;
}
使用正则表达式:
/*
====================================================================
checkSafe():检测域值是否包含特殊字符,如:',/,\,",<,>;包含返回false,否则返回true。
====================================================================
*/
function isSafe(str){
var reg = /^.*[\'|\"|\/|<|>].*$/;
return !reg.test(str);
}
=========================================================================
以上程序顺手摘来,希望原作者不要怪罪。
=========================================================================
知道正则表达式的利害了吧!其实这才是正则表达式的简单的一项应用而已。更厉害的还多着呢。
那么,现在我来告诉你,正则表达式都是可以用来干什么:
1)数据格式的有效性验证:你可是已经 见识过了。
2)文本替换:文本编辑器你应该见识多了,哪个里面没有搜索和替换功能呢?如果你用过这些,那末,你已经是正则表达式的受益者了。
3)提取字符串:没有他,据说搜索引擎都不工作。呵呵。
在看看微软帮助文档上举的例子吧:
例如,如果需要搜索整个 web 站点来删除某些过时的材料并替换某些HTML 格式化标记,则可以使用正则表达式对每个文件进行测试,看在该文件中是否存在所要查找的材料或 HTML 格式化标记。用这个方法,就可以将受影响的文件范围缩小到包含要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料,最后,可以再次使用正则表达式来查找并替换那些需要替换的标记。
现在知道什么是正则表达式了吧。如果你还不知道,那么我终于找到一个比我更笨的了!
不过,最后我还得再告诉你几点,让你的Mind更上一层楼:
1)正则表达式是一种进行高效、准确、简洁的进行文本字符串处理(模式验证、搜索替换等)的方法学。
2)各种主流的程序设计语言都提供了对正则表达式的支持。当然,每种语言的实现程度和实现方式都不尽相同,但基本思想是相同的。所以,只要你在一种语言中有过正则表达式的使用经验,在其他语言上应该一看就明白。(还不赶快看一下你手头的语言是怎么支持正则表达式的
)。3)应用正则表达式时,一定要加注释。如果不加,会有人在背后骂你的,虽然你听不见。
4)如果你看完之后,还用那种笨重的方式进行字符串处理的话,你应该比我还笨一点点。哈哈。
二、在Java Script中初步尝试正则表达式:
学习正则表达式最好从模式验证开始,因为这些东西比较直观,易懂。举个最简单的例子,我们要验证一个字符串是否为一个邮政编码,如何来验证呢,先看程序:
/*
*============================================
*isPostCode():判断是否为邮政编码(中国6位数字)
*============================================
*/
function isPostCode(str){
var reg = /^\d{6}$/;//什么玩艺,乱七八糟的,两边单引号、双引号都没有!
if(reg.test(str)){
return true;
}else{
return false;
}//end if
//写简单些:return reg.test(str);if语句真罗嗦。
}//end function
看到那行乱七八糟的东西了吗?这就是精华。哈哈。他就是用来验证一个字符串是否是一个邮政编码的“模式”。
其中:
/.../:代表一个模式的开始和结束。
^:用来匹配输入字符串的开始。(定位符)
$:用来匹配输入字符串的结束。(定位符)
\:是个转义字符,\d就代表匹配一个数字。(不会不知道转义吧?)
{n}:代表前边子模式匹配的次数。(限定符)
现在明白了吧:一个字符串,从开头到结束必须是6个数字字符。(什么乱七八糟的,哈哈)。
而 reg就是你定义的一个正则表达式对象。(知道对象吧?)
test()就是reg的一个方法了,他测试给定的字符串是否和正则表达式reg中的模式是否匹配(即:给定的字符串是否符合reg中的模式)。如果符合返回true,否则返回false。
如果你还是不明白,那我再给你解释最后一遍:
/*
*============================================
*isGoodMM():判断是不是一个好MM
*============================================
*/
function isGoodMM(mm){
var you = /^你欣赏MM的标准:身高、PP等等$/;
if(you.test(mm)){//看看是不是一个好MM
return true;//Yes,that's good!
}else{
return false;//什么玩艺,哈哈。
}//end if
//祝你好运!
}//end function
如果以上的你都明白了,那么你已经入门了。明天我将和你一起深入学习Java Script 中使用正则表达式的语法知识。
下面将是我们明天探讨的主题:
三、Java Script中的正则表达式基础语法:
四、深入理解语法:
五、正则表达式的高级应用:
六、补序:正则表达式的历史