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]+$/

 

 

posted @ 2020-05-10 20:52  Codermoon  阅读(205)  评论(0)    收藏  举报