JS正则表达式的常用方法

401 阅读3分钟
  • 个人觉得,比较齐全的学习正则:c.biancheng.net/view/9359.h…,下面做一些梳理。
  • 本章的内容主要介绍js正则的相关方法,具体正则的编写-----后面补吧(主要是不是很会)。
  • 方法可能不够齐全,后面可补!各位大佬们可以提出来,我补,谢谢!

RegExp对象

  • 最简单的RegExp对象的案例(匹配全局数字):/\d/g

  • RegExp对象提供的一些方法来执行正则表达式(列举比较常用的)

    • exec()

      • 在字符串搜索匹配项,并返回一个数组,若没有匹配则返回null。(只会匹配返回一个,我还认为会返回所有呐,再见,返回所有的在下面有)
      // 案例
      let str='test66t6s'
      let reg=/\d/g
      reg.exec(str)           // 输出的结果:['1', index: 4, input: 'test66t6s', groups: undefined]
      
    • test()

      • 测试字符串是否与正则表达式匹配,匹配则返回true,不匹配返回false
      // 案例
      let str='test66t6s'
      let reg=/\d/g
      reg.test(str)           // 输出的结果:true
      
    • toString()

      • 返回表示指定对象的字符串
      // 案例
      let str='test66t6s'
      let reg=/\d/g
      reg.toString(str)           // 输出的结果:'/\d/g'
      

String对象正则常用的几个方法

string对象的方法,那么正则表达式,当然就是当参数的份儿咯;下列案例中,案例一匹配全局,案例二不匹配全局。

  • serarch()

    • 返回的匹配到的第一个符合规则的字符串的首个字符的下标
    // 案例一
    let str='test66t6s'
    let reg=/\d/g
    str.serarch(reg)            // 输出的结果:4// 案例二
    let str1='test66t6s'
    let reg1=/st6/
    str1.search(reg1)           // 输出的结果:2
    
  • match()

    • match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
    • 该方法类似 indexOf()lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
    // 案例一
    let str='test66t6s'
    let reg=/\d/g
    str.match(reg)          // 输出结果:(3) ['6', '6', '6']// 案例二
    let str1='test66t6s'
    let reg1=/\d/
    str1.match(reg1)            // 输出结果:['6', index: 4, input: 'test66t6s', groups: undefined]
                                // 咳咳,和RegExp对象提供的exec方法,输出结果一样
    
  • matchAll()

    • 返回的是一个迭代器,可以使用for...of..,或者数组的扩展运算符(...)或者Array.form()实现展示和相关功能
    • 如果未展开,则输出就是:RegExpStringIterator {}
    • 必须是全局的正则,否则报错
    // 案例一
    let str='test66t6s'
    let reg=/\d/g
    str.matchAll(reg)           // 输出结果:RegExpStringIterator {}
    console.log(...str.matchAll(reg))           
    /* 输出结果:
        ['6', index: 4, input: 'test66t6s', groups: undefined] 
        ['6', index: 5, input: 'test66t6s', groups: undefined] 
        ['6', index: 7, input: 'test66t6s', groups: undefined]
    */
    ​
    // 案例二
    let str1='test66t6s'
    let reg1=/\d
    str1.matchAll(reg1)         // 输出报错:Uncaught TypeError: String.prototype.matchAll called with a non-global RegExp argument
    
  • replace()

    • 将匹配到的字符串进行替换,符合正则表达式规则,没有写匹配全局使只替换匹配到符合规则的第一个
    // 案例一
    let str='test66t6s'
    let reg=/\d/g
    str.replace(reg,9)          // 输出的结果:'test99t9s'// 案例二
    let str1='test66t6s'
    let reg1=/\d/
    str1.replace(reg1,9)        // 输出的结果:'test96t6s'
    
  • replaceAll()

    • 必须是全局的正则,否则报错
    // 案例一
    let str='test66t6s'
    let reg=/\d/g
    str.replaceAll(reg,9)           // 输出的结果:'test99t9s'// 案例二
    let str1='test66t6s'
    let reg1=/\d/
    str1.replaceAll(reg1,9) // 输出的报错:Uncaught TypeError: String.prototype.replaceAll called with a non-global RegExp argument
    
  • split()

    • 不管是不是全局正则,只要匹配到符合正则规则的所有字符串,全部进行剪切操作,有别与replace和match,没有对应的All方法。
    // 案例一
    let str='test66t6s'
    let reg=/\d/g
    str.split(reg)          // 输出结果:(4) ['test', '', 't', 's']
    ​
    // 案例二
    let str1='test66t6s'
    let reg1=/\d/g
    str1.split(reg1)            // 输出结果:(4) ['test', '', 't', 's']