正则表达式(正则表达式的方法和属性、正则的修饰符、表达式、元字符、量词)

什么是正则表达式

正则表达式是一种规则而这种规则能够匹配字符串的一种匹配模式,专门为简化字符串操作而生的

正则表达式的创建方式 字面量形式

var reg = /2/;//创建正则表达式(字面量形式)
      console.log(reg)

在这里插入图片描述
正则表达式是由,两波反斜杠包裹的数据/2/

那么正则表达式,是什么数据类型的呢??

var reg = /2/;
      console.log(typeof reg)//检查正则表达式的数据类型

在这里插入图片描述object说明了正则表达式是一个对象

正则是一个引用数据类型typeof 正则 --> 'object'

正则表达式的方法和属性

reg.test(str)检测str中有没有符合reg的规则

      var reg = /e/;
      var str = 'huasheng';
      console.log(reg.test(str));

在这里插入图片描述

var reg = /e/;
      console.log(reg.test("acdp"));

在这里插入图片描述
不仅仅规则可以写单个字母,还可以写验证规则用在test方法上

var reg = /(h|g)e/;//|号表示或者的意思
      //这个规则的意思是匹配he或者是ge
      var str = 'huasheng';
      console.log(reg.test(str));

在这里插入图片描述

reg.test(字符串) 检验字符串中有没有reg对应的规则

  • 如果有 则返回true
  • 如果没有 则返回false

str.match(正则) 按照指定的正则规则 匹配出str中的符合规则的字符

 var str = /n/;
      var reg = "huashengn";
      console.log(reg.match(str));

在这里插入图片描述
str.match()的方法返回的是一个数组,他的第一项表示匹配出来的数据,第二项index表示匹配出来的数据在索引几,第三项input表示你匹配的原始字符串

str.match(正则) 字符串方法

  • 按照指定的正则规则 匹配出str中的符合规则的字符
  • 如果没有匹配出来 则返回null

正则的修饰符

i 忽略大小写

var str = /Hu/i;//规则
      var reg = "huasheng";//要检验的字符串
      console.log(str.test(reg))

str验证reg中有没有Hu字母,/杠后面的i表示在查询对应的规则时忽略大小写,给过是true
在这里插入图片描述
g 全局匹配

var str = /h/g;//规则
      var reg = 'huasheng';//要检验的字符串
      console.log(reg.match(str));

str检查reg中有没有h字母,/杠后面的g表示在查询对应的规则时并全局匹配,给过是["h", "h"]
在这里插入图片描述
g 全局匹配i 忽略大小写 可以同时写,如:

 var str = /h/ig;//匹配规则
      var reg = "HuahsHeng";//要匹配的字符串
      console.log(reg.match(str));

str检查reg中有没有h字母,/杠后面的ig表示在查询对应的规则时并忽略大小写和全局匹配,给过是["H", "h", "H"]
在这里插入图片描述
总结

  • 正则的修饰符 修饰符的顺序可以颠倒
  • i 忽略大小写 i是取ingorecase单词的首字母
  • g 全局匹配 g是取global单词的首字母

表达式

表达式作用:表示的是字符串的区间

[a-z] 表示a-z中的任何一个数据

var str = /[a-z]/g;//正则表达式,并全局匹配
      var reg = "h1u2s3";//要匹配的字符串
      console.log(reg.match(str));

str检查reg的字符串,匹配出来的数据是[a-z]的字母不包含别的数据,并且全局匹配,结果是["h", "u", "s"]
在这里插入图片描述
[acde] 表示acde中的任何一个数据

var src = /[abd]/g;//要匹配的条件
      var tag = "huasheng";//要匹配的字符串
      console.log(tag.match(src));

str检查reg的字符串,匹配出来的数据是[acde]的字母不包含别的数据,并且全局匹配,结果是["a"]
在这里插入图片描述
[^acde] 表示除了acde中的任何一个数据

 var src = /[^hse]g/;//要匹配字符串的规则
     var reg = "huasheng";//要匹配的字符串
     console.log(reg.match(src));

str检查reg的字符串,匹配出来的数据是除了[acde]的字母不包含别的数据,并且全局匹配,结果是["u", "a", "n", "g"]
在这里插入图片描述
还可以用许多形式写正则表达式

  • [acde] 表示acde中的任何一个数据
  • [^acde] 表示除了acde中的任何一个数据
  • [a-z] 表示a-z中的任何一个数据
  • [A-Z] 表示A-Z中的任何一个数据
  • [A-z] 表示A-z中的任何一个数据
  • [0-9] 表示0-9中的任何一个数据
  • [\u67d7\u65d7\u00d1\u5d08] 表示对应unicode编码的任意一个中文字符

元字符

元字符本质也是表达式,也是用来表示字符的区间,注意元字符也只能匹配一个字符

\w 表示 [0-9A-z_] 中的任何一个数据

var str = 'hus2h7ng_';//要匹配的字符串
      var reg = /\w/g;//匹配字符串的条件
      console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是[0-9A-z_] 的字母和_不包含别的数据,并且全局匹配,结果是["h", "u", "s", "2", "h", "7", "n", "g", "_"]\w是word英文的简写
在这里插入图片描述
\W 表示除了 [0-9A-z_] 中的任何一个数据

var str = 'hus2h7n   g_';//要匹配的字符串
      var reg = /\W/g;//匹配字符串的条件
      console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是除了\w的元字符不包含别的数据,并且全局匹配,结果是[" ", " ", " "]
在这里插入图片描述
\d 表示 [0-9] 中的任何一个数据

 var str = 'hus2h7ng_';//要匹配的字符串
      var reg = /\d/g;//匹配字符串的条件
      console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是\d的元字符不包含别的数据,并且全局匹配,结果是["2", "7"]\d是digital英文单词的简写
在这里插入图片描述
\D 表示不是 [0-9] 中的任何一个数据

 var str = 'hus2h7ng_';//要匹配的字符串
      var reg = /\D/g;//匹配字符串的条件
      console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是除了\d的元字符不包含别的数据,并且全局匹配,结果是["h", "u", "s", "h", "n", "g", "_"]

\s 表示匹配中能够使字符串产生间隙的字符 ([\n\f\r\t\v ]都能让字符串产生间隔)

 var str = 'hns2 h7 ng_';//要匹配的字符串
      var reg = /\s/g;//匹配字符串的条件
      console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是除了能让字符产生间隙的字符(空格键和Tab键),不包含别的数据,并且全局匹配,结果是[" ", " "]\s是space英文的简写
在这里插入图片描述
\S 表示匹配中不能,使字符串产生间隙的字符

var str = 'hns';//要匹配的字符串
      var reg = /\S/g;//匹配字符串的条件
      console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是除了不能让字符串产生间隔的字符,不包含别的数据,并且全局匹配,结果是["h", "n", "s"]
在这里插入图片描述
. 表示匹配除了换行之外的字符**

var str = 'hn\ns';//要匹配的字符串
      var reg = /./g;//匹配字符串的条件
      console.log(str.match(reg));

str检查reg的字符串,匹配出来的数据是除换行符之外的所有字符,不包含别的数据,并且全局匹配,结果是["h", "n", "s"]
在这里插入图片描述
在这里插入图片描述

量词

无论 表达式还是元字符都只能匹配到一个字符无法匹配多个字符,所以引入量词的概念,用来设置匹配到字符的个数

 var str = "huasheng";
      var reg = /\w{2}/;//量词是用花括号来写的,里面写数量
      //表示匹配了2个在\w剧中的字符
      console.log(str.match(reg));

在这里插入图片描述
那么用g全局匹配呢???

情况一

var str = "huasheng";
      var reg = /\w{2}/g;//会匹配指定个数在字符区间中的字符
      console.log(str.match(reg));

那么就会匹配到了hu还不够,有让我全局匹配as,he,ng,那匹配出来的结果是…
在这里插入图片描述
每一次匹配都会匹配到2个字符,因为你在花括号里面给了数量了,如果不给数量的话,那么也会全局匹配,第一次只能匹配出来一个字符然后一次往下匹配。

情况二

var str = "huasheng";
      var reg = /\w{5}/g;
      console.log(str.match(reg));

那么你指定的个数,不满足匹配字符串的倍数呢??
在这里插入图片描述
那会先匹配前面符合字符的个数,即使全局匹配了也没有用

那么能不能匹配2-3个字符呢??

var str = "hu12as34he567ng";
      var reg = /\d{2,3}/g;//那么这样写会匹配到2个或者3个字符
      console.log(str.match(reg));

当使用量词的时候,2个字符或者是3个字符,当满足条件的时候,那么就会贪婪匹配(尽可能多的匹配),当每次匹配的时候就会尽可能多的匹配。每次匹配的时候满足规则就能够去3个的时候决不取2个(当满足点前规则的时候尽可能多的匹配)
在这里插入图片描述
那么遇到{2,}这种情况的结果是什么呢

var str = "hu123g45677y55i";
      var reg = /\d{2,}/g; 
      console.log(str.match(reg));

那么当你每次匹配的时候至少匹配2个字符
在这里插入图片描述
那该怎么匹配至少一个字符 呢??

var str = "hu123g45677y55i";
      var reg = /\d+/g;//表示匹配数量,至少一个,他会匹配到一个符号条件的时候会贪婪匹配
      console.log(str.match(reg));

在这里插入图片描述
那该怎么匹配至少0个字符 呢??

 var str = "hu123g45677y55i";
      var reg = /\d*/g;//*表示至少0个数字
      console.log(str.match(reg));

在这里插入图片描述
x? 匹配[0,1]个字符

var str = "hu123g45677y55i";
      var reg = /\d?/g;//*表示至少0个数字
      console.log(str.match(reg));

那么只要牵扯出来匹配0个字符,那么肯定会有很对空串出来的,那么牵扯到0的不常用。
在这里插入图片描述
那么该怎么取消贪婪匹配呢??

var str = "hu123g45677y55i";
      var reg = /\d{2,3}?/g;
      console.log(str.match(reg));

在量词后面加上 ?号 就能够取消贪婪匹配
在这里插入图片描述
总结

无论是 表达式还是元字符都只能匹配一个字符

量词:表示数量 尽可能多匹配字符贪婪匹配)在量词后面加上 ? 就能够取消贪婪匹配

  • {x} 匹配x个字符
  • {x,y} 匹配[x,y]个字符
  • {x,} 匹配至少x个字符
  • x+ 匹配至少一个字符
  • x* 匹配至少0个字符
  • x? 匹配[0,1]个字符
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值