最近一直都在学习JS有关知识,一直以来有时候感觉学过的知识反过来再去回想,就会比较模糊,所以我感觉任何学后的知识都需要总结,所以正好借着我敬爱的西岭老湿推荐的这个专栏平台可以把自己所学总结一下,和大家互相交流一下,互相学习,互相进步,下面步入正题。
一丶JS中让正则发挥作用的两个类
二丶创建一个正则
第一种:字面量创建,将正则表达式直接当做对象使用。
var cc = /[a-z]/;
第二种:实例化RegExp对象方式
var cc = new RegExp('[a-z]');
三丶常用的特殊字符(当然是我自认为用的比较多的,以及查资料看见的次数比较多的)
那些常见的字符就不说了,主要是用的比较多的,以及公共的方法.
- 匹配量的:* + ? {n} {n,} {n,m}
- 匹配位置的:^ $
- 匹配并且需要支持分组的时候需要括号来包裹:(匹配的模式)
- 匹配条件的:|
- 匹配集合的:[]
- 匹配非集合的:[^]
这个并不代表所有的,只是我现学到的感觉重要的就是这些,当然知识是需要不断补充滴。
四丶正则对象的方法
1.Js正则对象方法
- text()方法
var cc = "XilinglaoshiZuiShuai";
var k = /^[A-Z]/; //匹配第一个字母为大写字母的
console.log(k.test(cc)); //true
- exec()方法
var cc = 'xilinglaoshizhenshuai';
var k = /[a-z]/;//匹配小写字母字符串
//var k = /[a-z]/g;//全局匹配小写字母字符串
var res1 = k.exec(cc);
console.log(res1);//["p"] 只匹配一次,返回数组
2.String对象的正则方法
- match()方法
如果匹配,返回包含匹配结果的一个数组;不匹配返回null。
var cc = "xcc @qq.com ";
var k = /[@.]/g; //.需要转义,g为匹配全局
var res = cc.match(k);
console.log(res);//["@","."]
- replace()方法
stringObj.replace(regex, replacement)
在字符串中检索匹配正则表达式regex的子串,并替换为指定的字符串replacement;
返回替换之后的新字符串。
直接案例走起。。。。。。。。。。
案例:手机号中间四位替换为****
var cc = "17600003333";
var k =/(d{3})d{4}(d{4})/;
var res = cc.replace(k,'$1****$2');
console.log(res); //176****3333
注:替换的时候,使用"$1"表示匹配的第一个子表达式:
用$2表示第二个子表达式,以此类推。
- search()方法
在字符串中搜索符合正则表达式的结果。如果找到结果返回结果的起始位置,停止向后检索,也就是说忽略全局标识符g;如果没有匹配结果,返回-1.
var cc = "xcc @qq.com ";
var k = /@/g;
var res = cc.search(k);
console.log(res);//4
- split()方法
把一个字符串分割成字符串数组, 返回一个数组
var cc = "xcc @qq.com ";
var k = /@/g;
var res = cc.split(k);
console.log(res);//["xcc", "qq.com"]
我感觉最重要的就是replace()方法,用到的地方比较多,所以需要学的还是比较多的,以后有知道的再加上去吧!!!!
注:下面干货来了,后方高能请注意!!!!!!!!
五丶常用正则总结(特殊需求表达式)
虽然不是自己写的,但是都是通过网上找到的最新的,应该是最新的,那个是手机号最起码能匹配到我的!!!!哈哈哈
Email地址:^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
InternetURL:[a-zA-z]+://[^s]* 或 ^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$
手机号码:
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|16[5]|17[0-8]|18[0|1|2|3|5|6|7|8|9])d{8}$
电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX):
^((d{3,4}-)|d{3.4}-)?d{7,8}$
国内电话号码(0511-4405222、021-87888822):
d{3}-d{8}|d{4}-d{7}
身份证号(15位、18位数字):
^d{15}|d{18}$
短身份证号码(数字、字母x结尾):
^([0-9]){7,18}(x|X)?$
或 ^d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):
^[a-zA-Z]w{5,17}$
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):
^(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
日期格式:^d{4}-d{1,2}-d{1,2}
一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
钱的输入格式:
1.有四种钱的表示形式我们可以接受:”10000.00” 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”:
^[1-9][0-9]*$
2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0”不通过,所以我们采用下面的形式:
^(0|[1-9][0-9]*)$
3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:
^(0|-?[1-9][0-9]*)$
4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:
^[0-9]+(.[0-9]+)?$
5.必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10” 和 “10.2” 是通过的:
^[0-9]+(.[0-9]{2})?$
6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:
^[0-9]+(.[0-9]{1,2})?$
7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:
^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:
^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
备注:这就是最终结果了,别忘了”+”可以用”*”替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
HTML标记的正则表达式:<(S*?)[^>]*>.*?</>|<.*? />
(网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
首尾空白字符的正则表达式:^s*|s*$或(^s*)|(s*$)
(可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
腾讯QQ号:[1-9][0-9]{4,}
(腾讯QQ号从10000开始)
中国邮政编码:[1-9]d{5}(?!d)
(中国邮政编码为6位数字)
IP地址:d+.d+.d+.d+
(提取IP地址时有用)
IP地址:((?:(?:25[0-5]|2[0-4]d|[01]?d?d).){3}(?:25[0-5]|2[0-4]d|[01]?d?d))
好了,自己能写的就这么多,知识毕竟有限,还需要努力且努力,但愿自己能早日真正踏入程序界,能有自己的一席之地 啊哈哈哈哈