jsday13

1.  什么是正则
使用特定的符号所描述的一种规则
 
举例:
用户名只能输入 数字、字母、下划线 ,同时数字不可以作为开头,同时用户名不能包含中文
同时长度必须在6-20之间
 
var str = username;
if( /^([a-zA-Z]\w+){6,20}$/.test(str) ){
     //符合规则
}
 
 
2.为什么要使用正则表达式?
可以大量的节省验证的工作量
 
3.如何创建正则表达式?
字面量创建
    var reg  = /a/
构造函数创建
 var reg = new RegExp('a','g');
 
4.匹配符
\d  数字
\D  非数字
\w  数字字母下划线
\W 非数字字母下划线
\s   空白字符
^ : 以什么开始
  $ : 以什么结束
\. : 代表的是.本身。(.有特殊的意义表示除换行以外的意义字符,想代表本身需要转意)
\ :代表着转义
[\u4e00-\u9fa5]:验证中文
 
5.量词 
量词 : 出现元字符的后面,修饰前面的这个字符出现的次数
     ? :  0-1次 => 可以出现可以不出现
     * : 0-多次  => 可以不出现,也可以出现无数次
     + :  1-多次 => 至少出现1次
    {n} : 出现n次
    {n,} : 至少出现n次
    {n,m} : 出现n到m次
 
6.正则中的或者:两种   |  [ ]
"|" 代表或者 => 使用或者关系的时候,为了保证严谨。我们不妨加小括号来改变优先级。
[xyz] => x或者y或者z中的一个 => 无论中括号多长都是占一个字符
[^xyz] => 除了xyz的任意一个
[+-] => 在中括号这个或者中+和-都是本身
[.] => 代表.本身
[a-z] => 代表的a-z中的一个
[0-9] => 0-9中的一个
\w => [0-9a-zA-Z_]
 
/[abc]/字符中只要包含一个  a或b或者c就为true
/[^xyz]/  字符串中只要有一个不是x也不是y也不是z就是true
 
7.字面量创建和构造函数的区别?
1: 使用字面量的方式是不可以把变量添加到正则中
2 : 构造函数创建方式  => 第一个参数是一个字符串(就是字面量的方式放在两个斜杠中的那些字符) => 第二个参数就是修饰符(img),也是一个字符串
ps: 只要正则中需要引入变量,那么只能使用构造函数创建方式
ps: 如果在构造函数方式创建正则使用\d等特殊元字符,还需要转义一次。也要在前面添加一个'\' 
var name = "qianfeng";
     var reg = /name/;
     var str = "qianfeng"
     console.log(reg.test(str))
 
var name = "hello";
     var reg = new RegExp(name);//==>/hello/
     var str = "hello";
     console.log(reg.test(str))//true   
 
var reg = new RegExp("^\\d+$");
     var str = "1234";
     console.log(reg.test(str))//true      
 
8.exec捕获  和  match
exec捕获用法:
 ① 捕获结果: exec的捕获结果是一个数组,数组里的第一项是正则捕获到的内容
 ② 捕获结果中还包含index属性,是捕获开始的索引位置,input属性是捕获的那个整个字符串              
 ③ 如果捕获当次没有捕获到结果返回null
match是字符的方法 : match:字符串的方法,捕获出来的是一个数组,必须加g,才能全局捕获
 
exec实现match
var str = "qian2017feng2018pei2019";
var reg = /\d+/g;
var res = reg.exec(str);
var arr = [];
     while(res){ //一直捕获到为null的时候;结束while循环
           arr.push(res[0]);
           res = reg.exec(str);
     }
     console.log(arr)
 
9.正则的修饰符
g : 全文全局匹配
 i : 忽略大小写
 m : 多行匹配(了解)
 
10.常用的正则 
①.检查邮政编码//共 6 位数字,第一位不能为 0          
/^[1-9]\d{5}$/
 
②.删除一个字符串当中多余空格
str.replace(/\s+/g,"");
 
③.删除首尾空格
str.replace(/^\s+/g,"").replace(/\s+$/g,"");
 
④.电子邮件( xxxxx @ xxxx(.xxxx)+)
/^\w+@\w+(\.\w+)+$/
 
⑤.手机号  1 3|5|8|7|4
/^1[34578]\d{9}$/
 
⑥.身份证
/^\d{17}(\d|X)$/
 
⑦.匹配一个QQ邮箱地址  [email protected]
var reg = /^\d+@qq\.com$/
 
11.replace 替换 
replace是字符串的方法,每次只能替换一次,想全局替换,必须加g;

猜你喜欢

转载自www.cnblogs.com/cqdd/p/10245636.html