Fork me on GitHub

JS 正则表达式

正则表达式:是一个描述字符模式的对象,ECMAScript的RegExp类表示正则表达式。而string和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数。主要得功能用来查找、替换,通常用作验证,截取,隐藏,编码。

 

一 : 正则表达式的创建方式

  1: 字面量创建方式  语法: var reg = /正则表达式/修饰符

    修饰符:

       1: g 全局查找
       2: i 不区分大小写
         3 : m 多行匹配

1    var reg = /ab/g

  2:构造函数方式创建
    参数1:正则表达式内容
    参数2:  修饰符

1    var reg = new RegExp('ab','g')

二:正则表达式相关 api 和 常用的字符串方法

  第一类:正则相关 api

    1:方法一 test :查看字符串中是否右满足正则表的式的内容,返回值:右满足就返回布尔值 true 没有就返回 false

    语法:表达式.test('字符串')

1     // 字面量方式创建正则表达式
2     var r = /abc/
3     console.log(/abc/.test('abcdef'))  // 字符串有满足正则表达式的内容,返回 true

    2:方法二 :exec  - 查找字符串中是否有满足正则表达式的内容,返回值 一个数组 index是下标,没有找到就返回null

    语法:表达式.exec('字符串')

1     var reg = /sa/
2     // 创建一个字符串
3     var str = 'acjdfdfCCCdasads'
4     console.log(/sa/.exec(str1))   // 12

  第二类:字符串相关api

    1:替换 - replace   语法:字符串.replace(表达式,你要替换的内容)

1     // 定义字符串    
2     var str = 'abcdeacfghjac'
3     console.log(str.replace(/a/,'z')) // 将 a 转换成 z  ,单字替换
4     console.log(str.replace(/c/g,'k'))  // 全局多个替换
5     console.log(str.replace(/[bd]/g,'l'))  // 全局多个字符替换

    2:查找返回数组 - match  返回值:将字符串中满足表达式的组成一个数组返回

    语法:字符串.match(表达式)

1     var str = 'abcdeacfghjac'
2     console.log(str.match(/a/))  // 单字查找   返回到一个数组中
3     console.log(str.match(/a/g)) // 多个查找   全部返回到一个数组中

    3:查找元素,返回下标 -  语法:字符串.search(表达式)

1     var str = 'abcdeacfghjac'
2     console.log(str.search(/a/))  // 只能找到一个正在表达式的下标

    4:分割数组 - split    - 返回值:返回被分割字符串的数组 

1     var str = 'abcdeacfghjac'
2     console.log(str.split(/a/))  

 

三:元字符 : 是拥有特殊含义的字符

  在正则表达式中包含了一系列的字符,这些字符只能匹配它们本身。有一些被称为“元字符”的特殊字符,可以匹配一些特殊规则!接下来为大家介绍正则表达式中基础的元字符。

  1:通配符 : 表示一个任意字符

1     // 定义一个正则表达式
2     var reg = /c.t/g
3     console.log('catef'.match(reg))  // 返回一个数组,里面有一个元素 cat
4     console.log('abacadaeaf'.replace(/a./g,'z'))  // 将 a加上任意一个字符 转换成 z

  2:转义字符 : \  将元字符转换成字符

   // 定义一个字符串 
    var str = 'a.tef'
    // 利用转义字符 \ 将表达式中的 . 转化成字符
    // 当遇到 \内容 相当于将内容转换为字符   /\ 表示\字符
    console.log(str.match(/a\.t/g))  // 返回一个数组,里面有一个元素 c.t

  3:字符类:[ ]  -  满足[ ]内任意一个字符   

    注意: 通配符 . 在[ ] 中不需要转义,因为在[ ]中就是为字符 .

    var str = 'adtssactddsaat'
    // 只要满足[abcdefg] 中的任意一个字符 就会返回出去组成一个数组
    console.log(str.match(/a[abcdefg]t/g))   // adt act aat

    小实例:查找字符串中的所有数字,并将数字转换成字符

1     var str = 'sd54adas513a1da78878k'
2     // 将str中所有的数字找出,并转换成字符
3     console.log(str.match(/[0123456789]/g).join(''))  

    常用简化的字符类:

      [0-9] === [0123456789]
      [a-z] === [abcd......xyz]
      [A-Z] === [ABCD......XYZ]
      [A-Za-z0-9] === [以上三个的合集]
      [\u4e00-\u9fa5]    中文合集

  4:字符类中反义字符 :^

1     [^0-9]  除了数字以外的所有字符  -  非数值
2     [^A-Za-z]  除了字母以外的所有数值  -  非字母
3     [a^bc]   注意:如果 ^ 不是出现在 [] 的第一位,那么就代表 ^ 不是反义字符,就是字符串 ^ ,[a^bc] === 'a^bc'

    常用的转义字符类

       /\w/ === [a-zA-Z0-9_] 注意有下划线
       /\W/ === [^a-zA-Z0-9_]

       /\d/ === [0-9]
       /\D/ === [^0-9] 非数值

      /\s/ === / /
      /\S/ 非空格

  5:群组 ()  是可以将一些内容进行分组

1     当 a,b,c 使用() 后,被分为三个组,通过mache 可以查看到
2     当使用 () 后,就不要再使用 g 查找
3     分组的访问顺序:从外到内,从前到后
4     console.log('abc'.match(/(a(b)c)/))

    小案例:隐藏随机号码

1     // 模拟一个电话
2     var str = '18770414444'
3     // 将字符串分组
4     console.log(str.match(/^(\d{3})(\d{4})(\d{4})$/))
5     // 再群组中,$1 为群组1 $2 为群组2 ,依次类推 
6     console.log(str.replace(/^(\d{3})(\d{4})(\d{4})$/,'$1****$3'))

  6:重复 :{ } 

    当我们在定义一个字符串时,某个字符的重复出现次数较多,使用重复的转义字符将可以做到!

1     // 定义一个字符串
2     var str = 'caaaaaaaat'
3     // 使用正则表达式的 {} 转义后 :a{8}  重复八次
4     // 那么在使用 test 方法时, str字符串与 转义后的正则是相匹配的
5     console.log(/ca{8}t/.test(str))   // true  

    常用的重复方法:

      1:*  代表有或者没有,有多少都可以

      2:+ 代表有至少一个以上

      3:?代表有或者没有都可以,但最多一个

    /ca{0,}t/ ===  /ca*t/               {0,}     *  有或者没有,有多少个都可以
    /ca{1,}t/ ===  /ca+t/               {1,}     +  有至少一个以上
    /ca{0,1}t/ === /ca?t/               {0,1}    ?  有或者没有都行,最多1个

  7:起始符和结束符 :^  $

      注意:^ 起始符: 写在表达式开头就是表示起始,写在[ ] 里的开头就是反义

         $ 结束符: 写在表达式的最后面

1     var reg = /^a$/
2     console.log(reg.test('a'))  // true

  8:或者符:|

1     console.log('abac'.match(/ab|ac/g))  // 返回ab ac 组成的数组

 

posted @ 2020-06-06 14:40  Dm码羊  阅读(220)  评论(0编辑  收藏  举报