正则表达式

正则表达式

含义: 定义一个正则规则,用来检测某个字符串是否符合这个规则.

1. 创建正则表达式对象

字面量的方式

   //创建一个匹配"web"的正则表达式
   var reg = /web/;
   //验证str1和str2是否符合正则的规则
   var str1 = "kajsdks";
   var str2 = "kasjwebk";
   console.log(reg.test(str1));	//false
   console.log(reg.test(str2));	//true

new 关键字

   //创建一个匹配"java"的正则表达式
   var reg1 = new RegExp('java');
   var str3 = "akhdjjsavjava";
   console.log(reg1.test(str3));	//true

正则参数: 参数i-不区分大小写,g-全局匹配,m-多行匹配

   //创建一个匹配"web"的正则表达式,不区分大小写
   var str4 = "javahakjhsawebufih";
   var reg = new RegExp('web','i');	//true
   console.log(reg2.test(str4));
   //创建一个匹配"java"的正则表达式,不区分大小写且全局匹配
   var reg3 = /java/ig;
   console.log(reg3.test(str4));	//true
2. 常用匹配规则

任意字符 .

字母,下划线,数字 \w

任意空白符 \s

匹配数字 \d

匹配非数字 \D

或匹配 |

匹配字符串开始 ^

匹配字符串结束 $

匹配包含某字符或字符串(如ab)里面的任意一个 [ab]

只要有一个不是某(如a)字符都能匹配 [ ^a]

转义字符: / => / . => \ . \ => \ \

   //1.创建一个匹配任意字符的正则
   /./
   
   //2.创建一个匹配至少包含三个字符的正则,字符可以是字母,数字,下划线
   /\w\w\w/
       
   //3.创建一个匹配"ab sab"的正则
   /ab\ssab/
   
   //4.创建一个匹配2个数字的正则
   /\d\d/
   
   //5.创建一个匹配包含一位非数字的正则
   /\D/
   
   //6.创建一个匹配正则匹配,只要有13或18都行
   /13|18/
   //创建一个匹配abc或xyz的正则
   /abc|xyz/
   
   //7.网址必须是以http开头
   /^http/
   
   //8.必须是com结尾
   /com$/
   
   //9.字符串中只要有abc中的任意一个都能匹配
   /[abc]/
   //字符串中只要有0到9中的任意一个都能匹配
   /[0-9]/
   //字符串只要有a到z中的任意一个都能匹配
   /[a-z]/
   //只要有一个不是x的字符都能匹配
   /[^x]/
   //只要有一个不是a,b,c的字符都能匹配
   /[^abc]/
   //匹配http://baidu.com
   /^http:\/\/baidu\.com$/
3. 重复匹配

重复出现零次或一次 ?

重复出现一次或多次 +

重复出现零次或多次 *

重复出现n次 {n}

至少出现n次 {n,}

重复出现m到n次,其中m<n

   //写一个匹配网址的正则,只匹配前面,后面先不管
   /^https?:\/\//
   
   //写一个正则,字母a必须有一个或以上
   /a+/
   
   //写一个正则,字母a出现0次或多次都可以
   /a*/
   
   //写一个简单的日期匹配正则
   /\d{4}-\d{2}-\d{2}/
   
   //写一个简单的手机号码匹配
   /^1[3-9]\d{9}$/
       
   //写一个正则,要求8至少出现4次或以上
   /8{4,}/
   
   //写一个正则,数字,字母或下划线的位数是6到12位
   /\w{6,12}/
4. 正则表达式应用
  1. /^(0|86|17951|12593)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/
  	手机号:
          - (0|86|17951|12593)? 手机号码前缀
          - (13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57] |19[0-9]) 手机号码前3- [0-9]{8} 手机后82. /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/
      邮箱地址匹配:
          - \w+([-+.]\w+)*
          - @\w+([-.]\w+)*
          - \.\w+([-.]\w+)*
  
  3. /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i
      网址:
          - 协议:https?:\/\/
          - 域名:(([a-zA-Z0-9_-])+(\.)?)* 
          - 端口:`(:\d+)?
          - 参数:(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*
  
5. 分组
   //1.括号表示一个整体
   /^(abs|nps|ysl).*/	//必须以abs,nps或ysl开头,其他任意字符有无或多个
   
   //2.分组(括号内表示一个分组,可以用'\数字'来表示)
   /<([a-zA-Z]*[1-6]?>).*<\/\1/  //一个html标签格式
   
   //3.字符串替换分组: 替换里面是用$,而正则里面使用\,区分开来!
   var str = '13689327311';
   str = str.replace(/(\d{3})(\d{4})(\d{4})/,'$1****$3');
   console.log(str);	//手机号中间四位不显示136****7311
6. 贪婪匹配和懒惰匹配
   //1.字符串的match方法,可以检查匹配了\w+几次
   var str = 'aajkshdkaalallfalf';
   console.log(str.match(/a+/g));
   
   //2.贪婪匹配,尽可能多的匹配(默认是贪婪匹配+,*)
   var str = document.body.innerHTML;
   //贪婪匹配只能得到一个匹配项
   str.match(/^https?:\/\/.*\.(png|jpg|jpeg|git)$/);
   
   //3.懒惰匹配,尽可能少的匹配,在重复的后面加上?即可
   var str = document.body.innerHTML;
   //懒惰匹配可以得到多个匹配项
   str.match(/^https?:\/\/\.(png|jpg|jpeg|gif)$/);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值