转自:http://www.cnblogs.com/blbl/archive/2013/03/12/2956656.html
正则表达式可以:
l 测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。
l 替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
l 根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。
正则表达式语法:
一个正则表达式就是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
创建正则表达式:
Var re=new RegExp();//RegExp是一个对象
//这样没有任何效果,需要将正则表达式的内容作为字符串传递进去
Re=new RegExp("a");//最简单的正则表达式,将匹配字母a
Re=new RegExp("a","i");//第二个参数,表示匹配时不分大小写
Ø RegExp构造函数第一个参数为正则表达式的文本内容,而第一个参数则为可选项标志。标志可以组合使用:
l "g"(全文查找)
l "i"(忽略大小写)
l "m"(多行查找)
如:
Var re=new RegExp("a","gi");//匹配所有的a或A
Ø 正则表达式还有另一种正则表达式字面量的声明方式
Var re=/a/gi;
正则表达式对象方法
l "test",返回一个Boolean值,它指出在被查找的字符串中是否存在模式。如果存在则返回true,否则就返回false。
l "exec",用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。
l "compile",把正则表达式编译为内部格式,从而执行得更快。
正则表达式对像的属性
l "source",返回正则表达式模式的文本的复本,只读。
l "lastIndex",返回字符位置,它是被查找字符串中下次成功匹配的开始位置。
l "$1...$9",返回九个在模式匹配期间找到的、最近保存的部分。只读。
l "input ($_)",返回执行规范表述查找的字符。只读。
l "lastMatch ($&)",返回任何正则表达式搜索过程中的最后匹配的字符。只读。
l "lastParen ($+)",如果有的话,返回任何正则表达式查找过程中最后括的子匹配。只读。
l "rightContext ($'),"返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。只读。
String对像一些和正则表达式相关的方法
l "match",找到一个或多个正则表达式的匹配。
l "replace",替换与正则表达式匹配的子串。
l "search",检索与正则表达式相匹配的值。
l "split",把字符串分割为字符串数组。
正则表达式高级篇
无字符
使用元字符注意事项:元字符是正则表达式的一部分,当我们要匹配正则表达式本身时,必须对这些元字符转义。下面是正则表达式用到的所有元字符:
( [ { \ ^ $ | ) ? * + .
Ø 使用RegExp构造函数与使用正则表达式字面量创建正则表达式注意点
Var str="\?";
Alert(str);//只会输出?
Var re=/\?/;//将匹配?
Alert(re.test(str));//true
Re=new RegExp("\?");出错,因为这相当于re=/\?/
Re=new RegExp("\\?");正确,将匹配?
Alert(re.test(str));//true
² 注意:既然双重转义这么不友好,所以还是用正则表达式字面量的声明方式。
贪婪量词与惰性量词
l 用贪婪量词进行匹配时,它首先会将整会字符串当成一个匹配,如果匹配的话就退出,如果不匹配,就截去最后一个字符进行匹配,如果不匹配,继续将最后一个字符截去进行匹配,直到有匹配为止。直到现在我们遇到的量词都是贪婪量词。
l 用贪婪量词进行匹配时,它首先将第一个字符当成一个匹配,如果成功则退出,如果失败,则测试前两个字符,依此增加,直到遇到合适的匹配为止。
分组与非捕获性分组
Re=/abc{2}/;//将匹配abcc
Re=/(abc){2}/;/将匹配abcabc
//上面的分组都是捕获性分组
Str="abcabc###";
Arr=re.exec(str);
Alert(arr[1]);//abc
//非捕获性分组(?:)
Re=/(?:abc){2}/;
Arr=re.exec(str);
Alert(arr[1]);//unefined
候选(也就是所说的“或”)
Re=/^a|bc$/;//将匹配开始位置的a或结束位置的bc
Str="add";
Alert(re.test(str));//true
Re=/^(a|bc)$/;//将匹配a或bc
Str="bc";
Alert(re.test(str));//true
电子邮箱正则表达式:
用户名只能包含字母数字以及下划线,最少一位,最多25位,用户名后面紧跟@,后面是域名,域名名称要求只能包含字母数字和减号,并且不能以减号开头或结尾,然后后面是域名后缀(可以有多个),域名后缀必须是点号连上2-4位英文字母。
Var re=/^\w{1,15}(?:@(?!-))(?:(?:[a-z0-9-]*)(?:[a-z0-9](?!-))(?:\.(?!-)))+[a-z]{2,4}$/;
其他验证,参考: