JavaScript-正则表达式
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。
搜索模式可用于文本搜索和文本替换。
用处:查找、替换,通常用做验证,截取,隐藏,编码
var reg=/表达式/修饰符
创建方式:
字面量写法:var reg=/ab/g;
构造函数创建方法:var reg=new RegExp("ab","g");
修饰符:
g 全部
i 不区分大小写
m 多行匹配
1 var str="abCdecf"; 2 var index=str.search(/c/); 3 console.log(index); 4 str=str.replace(/c/gi,"z"); 5 console.log(str); 6 str=str.replace(/[ac]/gi,"z"); 7 console.log(str);
正则表达式的方法 :
test:查看字符串是否有满足正则表达式的内容,如果有,返回true,没有就返回false
1 var reg=/abc/; 2 var bool=reg.test("abcde"); 3 console.log(bool);
1 var str="eksdakjdksdh"; 2 if(str.indexOf("sa")>-1){ 3 console.log("这个字符串中有sa字符"); 4 } 5 if(/sa/.test(str)){ 6 console.log("这个字符串中有sa字符"); 7 }
exec:查找符合正则内容 ,index就是下标,返回一个数组,没找到就会返回null,不能查找多个
1 var str="eksakjdksadh"; 2 console.log(/sa/g.exec(str));
1 var str="abcdabcd"; 2 // replace 字符替换 3 str=str.replace(/a/,"z");//单字替换 4 str=str.replace(/a/g,"z");//多个替换 5 str=str.replace(/[ac]/g,"z"); 6 str=str.replace(/[ac]/g,function(item,index){ 7 // replace后面的函数 参数有2个,第一个是查找到的元素,第二个是下标 8 // 这个函数中return 的结果就是这个对于的字符串要替换成什么 9 if(item==="a") return "x"; 10 if(item==="c") return "y"; 11 }) 12 console.log(str); 13 14 // match 15 var str="abcdabcd"; 16 console.log(str.match(/a/));//查找一个时,与test类似,可以返回一个数组,下标和查找到的内容 17 console.log(str.match(/a/g));//查找多个,就会把每个查找到的内容返回出来 18 19 // search 20 var str="abcdabcd"; 21 console.log(str.search(/c/));//只能找到一个正在表达式的下标 22 23 // split 24 var str="ab?c=3&da=4&bcd=5"; 25 var arr=str.split(/[?&]/g).slice(1); 26 console.log(arr);
元字符:
. 通配符 任意一个字符
. 这个通配符在[ ]内不需要转义,因为在中括号内 .就是字符.不是通配符
1 var reg=/a./g 2 var str="ababdeaf"; 3 str=str.replace(reg,"az"); 4 console.log(str);
\. 将通配符转换为字符点的含义
当遇到 \内容 相当于将内容转换为字符 \\ 表示\字符
1 var str="a.tabt"; 2 console.log(str.match(/a\.t/g));
满足[]内任意一个字符 中括号内代表任意一个字符
1 var str="a&tacta1tadtalt"; 2 console.log(str.match(/a.t/g));//0: "a&t"1: "act"2: "a1t"3: "adt"4: "alt" 3 console.log(str.match(/a[abcdef]t/g));//0: "act"1: "adt"
字符类的范围
1、[1-9] 1,2,3,4,5,6,7,8,9
2、[a-z] 小写a到z的所有字符匹配
3、[A-Z] 大写A到Z的所有字符匹配
4、[0-9.,] 匹配0到9的任意数字或者句号或者逗号
5、[0-9A-F] 匹配0到9的任意数字或者大写A到大写F的任意字符
6、[0-9a-z\-] 匹配0-9,a-z的任意数组或者字符,或者-字符
一般我们用[]这种字符类匹配是为了在匹配是某些字符可以是多个字符。所以单独使用[a]与a是一样的作用。
字符类的反义
7、[^]反义字符,表示除了^所描述的字符外的其他字符,类似于js中!的作用。
转义字符类
8、\w 查找单词字符。与[a-zA-Z_0-9]相同
9、\W 查找非单词字符。[^0-9A-Za-z_]相同
10、\d 查找数字。与[0-9]相同
11、\D 查找非数字字符。与[^0-9]相同
12、\s 查找空白字符。
13、\S 查找非空白字符。
. 这个通配符在[]内不需要转义,因为在中括号内.就是字符.不是通配符
1 var str="asdkj你1231好sad,412欢fsdf迎aasf32来))8d千234253锋dsgsdd学((&习."; 2 str=str.match(/[,.\u4e00-\u9fa5]/g).join(""); 3 console.log(str);//你好,欢迎来千锋学习.
除了通配符. 以外在[]内其它符号仍需要转义 [,],这两个字符也需要转义
1 console.log("a[b]c".match(/[\[\]]/g));//0: "[" 1: "]"
指定重复次数范围
有时候我们需要指定重复的次数,例如想匹配aa或者aaa或者aaaa。这时候我们就需要制定一个重复次数的范围。
a{2,4}表示匹配aa,aaa,aaaa
colou{0,1}r 表示匹配 colour或者color
x{4,4}与x{4}相同
如果匹配的字符串中有最长的,则优先最长的。例如a{2,4},在字符串caaaare,这时候先匹配aaaa。
重复次数是可以开区间的
A{1,}没有给后面的内容,表示1到任意数,就是找到A以后,取最长的AAAA….字符。
.{0,}表示匹配任意内容,无论是什么都可以匹配,哪怕是空字符
任何内容重复0次,就是" " a{0} z{0} 9{0} 都是" "
关于重复的转义字符
?与{0,1}相同 例如 a{0,1},a?是相同的意思
*与{0,}相同,例如a{0,},a* 是相同的意思
+ 与{1,}相同,例如a{1,},a+是相同的意思
\?\*\+ 匹配?*+字符串
[?*+] 匹配一个?或者*或者+的字符串
起始符和结束符
^ 写在[]内叫反义,写在中括号外最前叫做起始
$ 写在正则最后叫做结束
/^a$/ "a"
^abc$/ "abc"
| 或者
1 console.log("abcd".match(/ab|cd|/g));//当多写一个或者符号,代表或者一个"" 2 console.log("abcd".match(/ab||cd/g));//当多写一个或者符号,代表或者一个""
|写在前面先匹配然后再向后匹配
1 console.log("abcd".match(/|ab|cd/g));//当多写一个或者符号,代表或者一个""
单词分割符
\b 单词分隔符
\B 非单词分隔符
例如 catcat 查找\bcat\b是无法查找到的,cat cat就可以用这个单词分隔符查到。
主要用来查找英文单词中的正则,一般想查找一个单词内的东西就需要用\b.*\b来包含
中文匹配
匹配中文: [\u4e00 - \u9fa5]
\u4e00 - \u9fa5 中间是汉字的Unicode编码范围
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
最大字符 \u9fd5
最小中文字符 \u4e00
群组()
将a,b,c使用()后,分别被分为3个组,只有在不使用g全局的情况match可以看到
当使用分组时,不要使用g全局匹配
分组的顺序是从外向内,从前向后
1 console.log("abc".match(/(a(b)c)/));//0: "abc" 1: "abc" 2: "b"
用户名
/^\w{8,16}$/
匹配邮箱
1:@前面字母数字下划线
2:@后面.前面字母或者数字,2-4
3:.后面字母2-4
/^\w+@[a-z0-9]{2,4}\.[a-z]{2,4}$/
电话号码
1、1开头
2、11位
3、2位为3,4,5,7,8
/^1[34578]\d{9}$/
匹配qq号
1、纯数字
2、6-11位
/^\d{6,11}$/
检测网址
1、www开头;
2:中间以字母或者数字或者下划线
3:后缀是2-4个字母
4:不区分大小写
/^https?:\/\/w{3}\.\w+\.[a-z]{2,4}$/i
密码等级
初级 8-16;
纯数字或纯字母
/^(\d{8,16}|[a-z]{8,16}|[A-Z]{8,16})$/
中级
数字+字母
/^([0-9a-zA-Z]{8,16})$/
高级
数字+字母区分大小写+特殊字符
/^([\w!@#\$%\^&\*]{8,16})$/
/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{6,16}$/
匹配IP
192.168.1.1;
1~255.0-255.0-255.0-255;
/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/
验证中文
/^[\u4e00-\u9fd5]+$/

浙公网安备 33010602011771号