正则表达式

正则表达式

正则表达式:用于匹配规律规则的表达式,正则表达式最初是科学家对人类神经系统的工作原理的早期研究,现在在编程语言中有广泛的应用,经常用于表单校验,高级搜索等。

创建正则表达式

构造函数的方式

var regExp = new RegExp(/\d/);

正则字面量

var regExp = /\d/;

正则的使用

/\d/.test("aaa1");

元字符

正则表达式由一些普通字符和元字符组成,普通字符包括大小写字母、数字等,而元字符则具有特殊的含义。

常见元字符

|表示或,优先级最低

()优先级最高,表示分组

字符类的元字符

[]在正则表达式中表示一个字符的位置,[]里面写这个位置可以出现的字符。

console.log(/[abc]/);//匹配a,b,c

[^]在中扩号中的^表示非的意思。

//^表示该位置不可以出现的字符
console.log(/[^abc]/);//匹配除了a,b,c以外的其他字符

[a-z] [1-9]表示范围

console.log(/[a-z]/.test("d"));//小写字母
console.log(/[A-Z]/.test("d"));//大写字母
console.log(/[0-9]/.test("8"));//数字
console.log(/[a-zA-Z0-9]/);//所有的小写字母和大写字母以及数字

边界类元字符

我们前面学习的正则只要有满足的条件的就会返回true,并不能做到精确的匹配。

^表示开头 []里面的^表示取反

$表示结尾

console.log(/^chuan/.test("dachuan"));//必须以chuan开头
console.log(/chuan$/.test("chuang"));//必须以chuan结尾
console.log(/^chuan$/.test("chuan"));//精确匹配chuan

//精确匹配chuan,表示必须是这个
console.log(/^chuan$/.test("chuanchuan"));//fasle

量词类元字符

量词用来控制出现的次数,一般来说量词和边界会一起使用

【13-正则量词.html】

  1. *表示能够出现0次或者更多次,x>=0;
  2. +表示能够出现1次或者多次,x>=1
  3. ?表示能够出现0次或者1次,x=0或者x=1
  4. {n}表示能够出现n次
  5. {n,}表示能够出现n次或者n次以上
  6. {n,m}表示能够出现n-m次

思考:如何使用{}来表示*+?

正则的使用

正则测试

  1. 验证QQ

    • 只能是数字
    • 开头不能是0
    • 长度为5-11位
    var qqReg = /^[1-9]\d{4,10}$/;
    
  2. 验证手机

    • 11位数字组成
    • 号段13[0-9] 147 15[0-9] 17[0178] 18[0-9]
    var mobileReg = /^(13[0-9]|147|15[0-9]|17[0178]|18[0-9])\d{8}$/;
    
  3. 验证邮箱

    • 前面是字母或者数字
    • 必须有@
    • @后面是字母或者数字
    • 必须有.
    • .后面是字母或者数字
    var emailReg = /^\w+@\w+(\.\w+)+$/;
    
  4. 验证姓名

    • 只能是汉字
    • 长度2-6位之间
    • 汉字范围[\u4e00-\u9fa5]
    var nameReg = /^[\u4e00-\u9fa5]{2,6}$/;
    

元字符归纳

   .       				除了\n(回车换行)以外的任意字符
   []      				1.范围    2.把元字符的意义干掉
   [0-9]       			0-9之间的任意一个数字
   [a-z]       			任意一个小写字母
   [Z-A]       			任意一个大写字母
   [a-zA-Z]       		任意一个字母不管大小写
   [0-9a-zA-Z]          任意一个数字或者是任意一个字母



   |       或者
   ()      分组,提升优先级



   *  {0,}       前面的表达式出现了0次到多次
   +  {1,}       前面的表达式出现了1次到多次
   ?  {0,1}      前面的表达式出现了0次或一次
   {n}           前面的表达式出现了n次
   ^       		以什么开头  eg:  ^[0-9]表示以数字开头
   $       		以什么结尾  eg:  [0-9]$表示以数字结尾



   \d      任何一个数字
   \D      任何一个非数字
   \s      任何一个空白符   空格  tab制表符
   \S      任何一个非空白符
   \w      非特殊符号
   \W      特殊符号
   \b      单词边界

正则表达式方法

//macth()显示匹配到的字符串加到数组中
//提取数字
 var str1 = "中国移动:10086,中国联通:10010,中国电信:10000"
 var arr1 = str1.match(/\d{5}/g);
 console.log(arr1);//["10086", "10010", "10000"]
 //提取日
 var str2 = "2019-08-06";
 var arr2 = str2.match(/(\d{4})[-](\d{2})[-](\d{2})/g);//用括号将匹配到的字符串分组
 console.log(arr2);//["2019-08-06"]
 console.log(RegExp.$3);//06 显示第三组字符串,RegExp.$固定写法
 var arr3 = str2.split("-");
 console.log(arr3);//["2019", "08", "06"]
 //字符串替换
 var str3 = "五十六个民族五十六朵花,五十六个闰土来偷瓜,五十六只钢叉手中拿,谁是猹啊谁是猹!";
 var str3 = str3.replace(/五十六/g,"五十七");//1.正则表达式里的字符串不加引号 2.若不加g则只能替换掉第一个“五十六”
 console.log(str3);//五十七个民族五十七朵花,五十七个闰土来偷瓜,五十七只钢叉手中拿,谁是猹啊谁是猹!
 //除去空白符
 var str4 = "     asda sd     ";
 str4 = str4.trim();//trim()只能去除头尾空白符    trim-修剪 切除
 str4 = str4.replace(/\s/g,"");
 console.log("-----"+str4+"-----");//-----asdasd-----
 //替换所有h为S
 //全局匹配加忽略大小写
 var str5 = "hHabscdhHS";
 var str5 = str5.replace(/[h]/ig,"S");
 console.log(str5);//SSabscdSSS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值