首页 > 代码库 > js正则学习及一些正则集合
js正则学习及一些正则集合
正则中文版详细说明请看中文版w3cschool-----http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
偶还看微软正则表达式语言-快速参考:http://msdn.microsoft.com/zh-cn/library/az24scfc%28v=vs.110%29.aspx
var reg=/(123)/;
var str=‘abc123‘;
str=str.replace(reg,‘***‘);
alert(str)
alert(RegExp.$1); //123 [typeof:string]
//当reg被任何形式使用过,而且reg里有包裹东西的小括号,那么第一个小括号的内容可以通过RegExp.$1(只能这么写)获得,第二个分组通过$2获得,以此类推,不过只能写到$9,在网上看到$99,不知道哪个对,知道的朋友告诉一声
//在正则里可用\1表示第一个小括号包裹的东西,相当于$1,注意这里的\1里面的值要跟前面括号里的值一样才能被匹配---偶测试是这样的
var reg=/(12)abc\1/;
var str1=‘12abc‘;
var str2=‘12abc12‘;
alert(reg.test(str1)); //false
alert(reg.test(str2)); //true
所谓惰性的理解:
?:官方语言--匹配上一个元素零次或一次;雷同{0,1} 就是可有可无的意思
var str=‘abcabcab2431abc‘;
var reg1=/abc/g;
var reg2=/(abc)*/g;
var reg3=/.*abc/g;
var reg4=/.*?abc/g;
alert( str.replace(reg1,‘*‘) ); //**ab2431*
alert( str.replace(reg2,‘*‘) ); //**a*b*2*4*3*1** 每个边界都被匹配了*为0时,abcabc匹配了当*为2时,abc匹配了当星号为1时
alert( str.replace(reg3,‘*‘) ); //* .*直接匹配了整个abcabcab2431
alert( str.replace(reg4,‘*‘) ); //*** 前面2个星号是匹配了abc,abc,后面一个星号是匹配了ab2431abc 把全局的g去掉就很容易看出来了
一些正则集合:
var reg={ trim:/^\s+|\s+$/g, //去掉字符串前后的空白字符 qq:/^[1-9]\d{4,11}$/, //网上看到腾讯QQ号是从10000开始的,然后先预留到12位的qq号 email:/^[a-z\d](\.?[\w\-]+)+[a-z\d]@[a-z\d]+(\-*[a-z\d])*(\.[a-z]{2,6})+$/i, //邮箱最前面需是英文字母,@前面需是字母或数字 //网易:邮件地址需由字母、数字或下划线组成 //阿里:请勿使用除字母 (a-z)、数字、下划线和英文句号外的其他字符 //188财富邮:4-20个英文字母,数字,点,减号或下划线组成 //qq:好像可以全是数字比如1144981399@qq.com //正确的怪异写法:str=‘wei--.1.23@1-6-C3c.com.cn‘... //错误的写法:str=‘-wei@163.com‘ || ‘wei..a@163.com‘ || ‘wei-@163.com‘... domain:/^[a-z\d]+(\.([a-z\d][a-z\d\-*]*[a-z\d]|[a-z\d]){1,63})*\.[a-z]{2,6}$/i, //万网提示:域名可由英文字母(不区分大小写)、数字、"-"(中横线)构成,不能使用空格及特殊字符(如!、$、&、?等);中文域名可含中文。"-"不能单独注册,不能放在开头或结尾。 //新网:每个点之间最多为63个字符,添加a记录时--不能含有非数字、字母、-的字符且-字符不能放在开头位置 //目前只有一个点的最长的域名好像是.travel---来自新网 在此忽略中文域名 //正确的怪异写法:str=‘mm.jz.W-E--I.com.cn‘ || ‘m.j-3-z.W-E-I.com.cn‘ || ‘wei.com‘... //错误的写法:str=‘nmn‘ || ‘-m.wei.com‘ || ‘m.wei.com-‘ || m..wei.com || ‘m.-jz.wei.com‘ || ‘wei.7com‘... //漏了一个:str=‘jz-.wei.com‘; 这个二级域名在新网(没有其他网的域名)是可以的,但是匹配却到了错误里面 url:/[http|https|ftp|ed2k|thunder|flashget]:\/\/[^\s]+/i, //URL格式---百度百科http://baike.baidu.com/view/567419.htm?fr=aladdin--真心不懂这些协议的具体信息 postcode:/^[1-9]\d{5}$/, //邮编---必须为1-9开头的6个数字组成 tel:/^1[3|4|5|7|8]\d{9}$/, //手机号码--参考百度百科http://baike.baidu.com/view/781667.htm?fr=aladdin 说实话还是不太清楚其规则 ftel:/^[1-9]\d{0,3}-\d{3}-\d{8}$/, //固话--没用过固话,来自百度知道http://zhidao.baidu.com/link?url=9boKAtc5FCYvUTehiVazGId-qjZJVxHFyGMlBLv5JzbZ68nqetbq2ZJsVWKU7Vw6M92uPRCIOki1BhaLFTX12q //但是,有的还是有带0的,那就这样吧:86-010-66778899 id:/^[1-8]{2}\d{4}[1|2][0|8|9]\d{2}[0|1]\d[0-3]\d{4}[\d|X]$/i, //身份证号---来自百度百科http://baike.baidu.com/item/%E5%B1%85%E6%B0%91%E8%BA%AB%E4%BB%BD%E8%AF%81%E5%8F%B7%E7%A0%81?from_id=12704049&type=syn&fromtitle=%E8%BA%AB%E4%BB%BD%E8%AF%81%E5%8F%B7&fr=aladdin //从1999年10月1日起,全国实行公民身份证号码制度,居民身份证编号由原15位升至18位。前6位为地址码;第七位至14位为出生日期码,此码由6位数改为8位数,其中年份用4位数表示;第15位至17位为顺序码,取消了顺序码中对百岁老人使用的特定编号;第十八位为校验码,主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,其取值范围是0至10,当值等于10时,用罗马数字符χ表示。所以现在都应该是二代身份证了吧 //给个最多200岁咯,1800,最小就2099 password:/^[\w\s`~!@#\$%\^&\*\(\)\-\+=\\\|\[\]\{\};:\‘\",\.<>/\?]*$/, //匹配输入的全是英文字符或数字,没有一点中文,日文等特殊字符
delNoPsw:/[^[\w\s`~!@#\$%\^&\*\(\)\-\+=\\\|\[\]\{\};:\‘\",\.<>/\?]]*/g //删除输入的非密码形式的字符串,比如说中文,日文等特殊字符 };
reg.password和reg.delNoPsw的用处:
我想一般用于移动端吧,因为移动端页面小,又要呈现尽量多的东西,像再次输入密码这样的用户效果就可以合并到一个密码框(像淘宝是这样做的),如下
正则集合无注释版下载:
http://pan.baidu.com/s/1qW19PN2
----以上皆为个人理解,如有错误纯属正常,因为理解来自于视频学习和个人对网络文章的理解,希望指正,偶要成长
js正则学习及一些正则集合