Javascript中的正则表达式(regular expression)提供了强大的模式匹配和文本检索与替换的函数,常用于数据提交到服务器之前先进行简单的表单验证,以节约大量的服务器端系统资源,并提供更好的用户体验。下面简单介绍一下javascript中如何使用正则表达式。
有2种创建方法,分别是采用new运算符创建和采用字面量方式(常用)。
方法一:采用new运算符创建
var box=new RegExp('helloworld'); //第一个参数是字符串 var box=new RegExp('helloworld','igm'); //第二个参数是可选模式修饰符,i表示忽略大小写,g表示全局,m表示多行匹配
方法二:采用字面量方式,使用一对斜杠/*********/来表示匹配验证的规则
var box=/helloworld/; //直接用2个斜杠 var box=/helloworld/ig; //第二个斜杠后面加上模式修饰符
常用的正则表达式:
1、验证邮政编码,格式为:6位数字,且首位不能为0
var pattern=/[1-9][0-9]{5}/; //若写成首位匹配模式:/^[1-9][0-9]{5}$/,则str前后不能添加其他字符,即str='137680'; var str='The code is 137680.'; alert(pattern.exec(str));
2、检查文件压缩包,格式为:文件名+扩展名,文件名可以是字母、数字、下划线,扩展名可以是zip,gz,rar,7z。
字母、数字、下划线使用正则表达式可表示为/[a-zA-Z0-9_]/,也可简写为/\w/(小写w);另外,若要匹配横杆-(或中文横杆——),则添加转义\-(或中文横杆\——);添加+号表示可以匹配一个或多个字符。
使用转义\.匹配扩展名前的点号。
zip|gz|rar|7z,中间的竖线|表示“或”关系,即匹配4种格式中的任意一种即可。
var pattern=/[\w\-\——]+\.zip|gz|rar|7z/; var str='test-123.zip'; alert(pattern.exec(str));
3、删除多余空格,原理:把空格替换成''。转义\s表示检查空格,g表示全局查找,若不添加g则只匹配第一个空格,即显示“123456 789 007 892”
var pattern=/\s/g; var str='123 456 789 007 892'; alert(str.replace(pattern,''));
4、删除首尾空格
方法一:
/^\s+/ ^表示从头开始严格匹配,+号表示匹配一个或多个空格,否则只匹配一个空格
/\s+$/ $表示从尾部严格匹配
var pattern=/^\s+/; //强制首 var str=' te st '; var result=str.replace(pattern,''); pattern=/\s+$/; //强制尾 result=result.replace(pattern,''); alert('|'+result+'|');
方法二:使用非贪婪(惰性)捕获
/^\s+(.+?)\s+$/ (*******)使用括号表示分组,在这里表示第一个分组。
(.+)中.表示任意字符,.+表示一个或多个任意字符。该种写法属于贪婪模式,会显示“|te st |”。
添加问号?则是惰性模式,st后面匹配到空格后就不再允许匹配"te st"中的空格了,(.+?)会显示“|te st|”。
注意:\s后面的+号并非连接符,而是表示匹配该法则的一个或多个字符。
var pattern=/^\s+(.+?)\s+$/; var str=' te st '; var result=pattern.exec(str)[1]; alert('|'+result+'|');
方法三:使用分组获取
同样需要惰性捕获,否则会显示“|te st |”。
$1同样表示第一个分组,此处的$1获取到的内容是"te st",然后对" te st "进行替换。
var pattern=/^\s+(.+?)\s+$/; var str=' te st '; var result=str.replace(pattern,'$1'); alert('|'+result+'|');
4、简单的验证电子邮件,格式分为几组:()@().() 即用户名+@+邮箱类型+.+后缀 邮箱类型有126、163、qq、gmail等,后缀(不能是数字)有com\cn\net等
{m,n}表示字符个数多于m且少于n。
此处的[0]即第0个分组,表示获取"[email protected]"。
var pattern=/^([\w\.\-\#]+)@([\w\-]+)\.([a-zA-Z]{2,3})$/; var str='[email protected]'; alert(pattern.exec(str)[0]);
上面用到的exec()方法可以用test()方法替换,但返回的值是布尔类型。
以上的正则表达仅为简单的验证,欢迎大家一起探讨,共同进步。
Author:致知
Sign:路漫漫其修远兮,吾将上下而求索。