WebApi复习06-正则表达式

正则表达式

正则表达式

  1. 正则表达式:对字符串进行逻辑匹配运算的 内置对象

正则是对象类型

表达式作用: 对字符串进行匹配运算

  1. 作用场景: 表单验证(手机号,验证码,账号,邮箱等)

  2. 如何使用: 两个流程

(1)创建正则对象: let reg = new RegExp(/正则表达式/)

(2)调用正则对象test()方法: reg.test('要校验的字符')

true: 符合规则 false: 不符合规则

了解: 正则对象和 array 和 obj 一样,也有自己的字面量简写

数组: []

对象: {}

正则: /正则表达式/

元字符与原义文本字符

正则表达式语法由两部分组成:

  1. 原义文本字符 : 字符串本身的含义

  2. 元字符 : 改变了字符串本身的含义, 类似于js中的关键字

[] {} () . \ + ? * ^ $ | ?

字符类

[] : 字符类 。将某种特征的字符归为一类

/[abc]/ : 将a 或 b 或 c这种字符归为一类

说人话 :只要有a b c任意一个字符即可

反向类

[^] : 反向类 。 将不是某种特征的字符归为一类。

/abc/ : 将不是a 或 不是b 或 不是c的字符归为一类

说人话 : 只要有除abc之外的任意一个字符即可

范围类

范围类 : 代表字符类的范围(实质是比较ASCII)

/[0-9]/ : 检测有没有数字字符

/[a-z]/ : 检测有没有小写字母

/[A-Z]/ : 检测有没有大写字母

范围类注意点:

(1)范围类可以连写

/[a-zA-Z0-9]/ : 检测字符串有没有字母或数字

(2)范围类是一个闭区间

/[5-8]/ : 检测有没有5-8之间的数据。 包含5和8

(3)范围类 右边 一定大于 左边

/[8-5]/ : 直接报错。 范围类一定是右边大于左边

/[8-90-5]/ : 可以的 。 包含8 9 0 1 2 3 4 5

预定义类

预定义类: 正则表达式提供好的用来匹配常见的字符类

预定义类等价类含义
.[^\r\n]除了回车和换行之外的所有字符
\d digit[0-9]数字字符(只要有数字即可)
\D[^0-9]非数字字符(只要没有数字即可)
\s space[\f\n\r\t\v]空格字符 (只要有空白字符即可)
\S[^\f\n\r\t\v]非空白字符(只要没有有空白字符即可)
\w word[a-zA-Z_0-9]单词字符(字母、下划线、数字)(只要有字母、数字、下划线即可)
\W[^a-zA-Z_0-9]非单词字符(只要没有字母、数字、下划线即可)

边界

严格匹配: ^字符串$

^abc$ : 含义是,字符串必须以a开头,中间必须是b,结尾必须是c. 边界不是检测字符串,而是检测位置的。

  • 满足该条件的只有一个字符串: abc

/^abc/ : 开头边界。 检测字符串是不是a开头+bc(a开头位置,后面一定要是bc) ^ 单独使用就是开头边界。

/abc$/ : 结尾边界。 检测字符串是不是ac+c结尾(c结尾位置,前面一定要是ab) $ 单独使用就是结尾边界。

/abc/ : 原义文本字符。 检测字符串有没有abc (只要有abc连在一起的字符即可)

/[abc]/ : 字符类。 检测字符串是否有 a或b或c 其中之一(只要有a b c任意一个字符即可)

/abc/ : 反向类。 检测字符串是否有 不是a或 不是b或 不是c 任意字符(只要没有a b c任意一个字符即可)

/^abc$/ : 严格匹配。 满足该条件的只有一个字符串: abc

量词

量词含义
?出现零次或一次(最多出现一次)
+出现一次或多次(至少出现一次)
*出现零次或多次(任意次)
{n}出现n次
{n,m}出现n-m次
{n,}出现至少n次(>=n)
      //   /\d?/  : 匹配 零次或一次(最多出现一次 <= 1)
      console.log('1234567890abc'.replace(/\d?/,'X'))// X234567890abc
      console.log('a1234567890abc'.replace(/\d?/,'X'))// Xa1234567890abc
​
      //   /\d+/  : 匹配 出现一次或多次(至少出现一次 >=1)
      console.log('1234567890abc'.replace(/\d+/,'X'))// Xabc
      console.log('a1234567890abc'.replace(/\d+/,'X'))// aXabc
​
      //   /\d*/  : 匹配 出现零次或多次(任意次)
      console.log('1234567890abc'.replace(/\d*/,'X'))// Xabc
      console.log('a1234567890abc'.replace(/\d*/,'X'))// Xa1234567890abc
​
      //  /\d{5}/ : 匹配5次
      console.log('1234567890abc'.replace(/\d{5}/,'X'))// X67890abc
      //  /\d{5,8}/ : 匹配5-8次
      console.log('1234567890abc'.replace(/\d{5,8}/,'X'))// X90abc
      //  /\d{5,}/ : 匹配>=5次
      console.log('1234567890abc'.replace(/\d{5,}/,'X'))// Xabc

分组

() 在正则中有三种含义

  1. 分组 : 把多个字符归为一组,用于量词

  2. 提升优先级 : 让 | 只匹配小括号内部的字符,提升|的优先级

  3. 向引用(提取) : 正则会提取()内部匹配的数据存入$中,可以进行反向引用

      /* 
        1.分组():  把多个字符归为一组,用于量词
           1.1  /love{3}/ : 含义  匹配 lov + e(3次)
                * 默认情况下量词只能对 一个 字符生效
           1.2  /(love){3}/ :  含义  匹配  (love) 三次
                * 如果希望量词可以对 多个字符生效,就可以使用()将多个字符归为一组
        */
      console.log(/love{3}/.test('lovelovelove123')) //false
      console.log(/love{3}/.test('loveeee123')) //true
​
      console.log(/(love){3}/.test('lovelovelove123')) //true
      console.log(/(love){3}/.test('loveeee123')) //false
​
      /* 
      2.提升优先级() : 
        2.1  /lo|ive/ : 含义 匹配 有 lo 或 ive
            * | : 正则中|代表或的意思,对|两边所有的字符生效
        2.2  /l(o|i)ve/ : 含义 匹配  l + o|i ve
            * () 和 | 一起使用可以提升|的优先级
      */
      console.log(/lo|ive/.test('lo123')) //true
      console.log(/lo|ive/.test('ive123')) //true
      console.log(/lo|ive/.test('love123')) //true
​
      console.log(/l(o|i)ve/.test('lo123')) //false
      console.log(/l(o|i)ve/.test('ive123')) //false
      console.log(/l(o|i)ve/.test('love123')) //true
​
     /* 
     3.反向引用 :
        * 正则表达式在匹配的时候,会自动把()内部匹配到的数据提取到RegExp的$变量中。 ($1-$9)
        * 此时可以可以在替换字符串的时候,通过调整$的顺序对字符串进行反向引用(调整字符串格式顺序)
     */
​
      console.log('2021-11-21'.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3/$2/$1'))//21/11/2021
​
      console.log(RegExp.$1)//2021
      console.log(RegExp.$2)//11
      console.log(RegExp.$3)//21
​
      /* 大陆: 年-月-日  2021-11-21
         香港:  日/月/年  21/11/2021
      */

修饰符

1.修饰符 : 对正则表达式进行修饰作用,可以改变正则表达式结果

g : global,全局匹配

i : intensity,区分大小写

m : multiple,检测换行符。用于边界

2.修饰符语法: /正则表达式/修饰符

      //1. g : 全局匹配
      // /a/ : 匹配字符a
      //(1)默认情况下,正则只能匹配第一个
      console.log('a123A456aaa789AAA'.replace(/a/,'X'))// X123A456aaa789AAA
      //(2)如果希望正则可以匹配所有的,就可以使用 g修饰符
      console.log('a123A456aaa789AAA'.replace(/a/g,'X'))// X123A456XXX789AAA
​
      //2. i : 不区分大小写
      //(1)默认情况下,正则表达式区分大小写
      console.log('a123A456aaa789AAA'.replace(/A/,'X'))// a123X456aaa789AAA
      //(2)如果希望正则不区分大小写,就可以使用 i修饰符
      console.log('a123A456aaa789AAA'.replace(/A/i,'X'))// X123A456aaa789AAA
​
      /* 正则表达式修饰符是可以同时写多个的 */
      console.log('a123A456aaa789AAA'.replace(/A/ig,'X'))// X123X456XXX789XXX
​
      //3. m : 检测换行符。  需要和边界在一起使用
      //m含义: 让边界  对换行符生效。 换行符后面的内容视为边界
      let str = '我爱我的可乐\n我爱我的可乐\n我爱我的可乐'
​
      console.log( str.replace(/^我/gm,'小明') )
​
      console.log( str.replace(/(.+)我(.+)/gm,'$1小明$2') )//替换中间的我 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

端端1023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值