• JavaScript -- 正则表达式及示例代码介绍


    正则表达式

    1 正则表达式的介绍

    • 正则表达式用来定义一个规则
    • 通过这个规则计算机可以检查一个字符串是否符合规则或者将字符串中符合规则的内容提取出来
    • 正则表达式也是JS中的一个对象,所以要使用正则表达式,需要先创建正则表达式的对象
    • typeof 返回的是object

    2 创建正则表达式

    通过构造函数创建:new RegExp()

    可以接收两个参数(字符串) 1.正则表达式 2.匹配模式

    使用这种方式js编译器会自动将我们的这种写法去转化和字面量相同的方式

    优势:可以传递变量,动态生成自责表达式

    let reg = new RegExp("a", "i") // 通过构造函数来创建一个正则表达式的对象
    console.log(reg)
    
    • 1
    • 2

    image-20221203212609652

    使用字面量来创建:

    // 创建和上面相同的正则
    let reg = /a/i
    console.log(reg)
    
    • 1
    • 2
    • 3

    image-20221203212705910

    使用构造函数的形式需要考虑转义字符,在字面量中可以直接写

    let reg = /\w/
    reg = new RegExp("\\w") // 如果只写 \w 的话会转义成 w,就表示字母w
    
    • 1
    • 2

    3 通过整个表达式检查字符串是否符合规则

    let str = "a"
    let reg = new RegExp("a")// 表示检查一个字符串中是否含有a
    // let reg = /a/ // 也可以使用这种方式定义
    
    let result = reg.test(str) // true
    result = reg.test("b") // false
    result = reg.test("abc") // true
    result = reg.test("bcabc") // true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4 正则表达式的基本语法

    1. 在正则表达式中大部分字符都可以直接写

    2. | 在正则表达式中表示或(整体的或)

      • /abc|bcd/表示有abc或者bcd这两个字符串
    3. [] 表示或(字符集)

      • [a-z] 任意的小写字母
      • [A-Z] 任意的大写字母
      • [a-zA-Z] 任意的字母
      • [0-9]任意数字
    4. [^] 表示除了

      • [^x] 除了x
    5. . 表示除了换行外的任意字符

    6. 在正则表达式中使用\作为转义字符

    7. 使用括号进行分组

    8. 其他的字符集

      • \w 任意的单词字符,相当于 [A-Za-z0-9_]
      • \W 除了单词字符,相当于 [^A-Za-z0-9_]
      • \d 任意数字,相当于 [0-9]
      • \D 除了数字,相当于 [^0-9]
      • \s 空格
      • \S 除了空格
      • \b 单词边界
      • \B 除了单词边界
    9. 开头和结尾

      • ^ 表示字符串的开头

      • $ 表示字符串的结尾例子

    10. 量词

      • 只对前面紧接的一个字符起作用
      • {m} 正好m个
      • {m,} 至少m个
      • {m,n} m-n个
      • +一个以上,相当于{1,}
      • *任意数量的a
      • ? 0-1次,相当于{0,1}

    5 提取符合规则的字符串

    使用re.exec()获取字符串中符合正则表达式的内容

    案例:对于str = "abcaecafcacc"提取出str中符合axc格式的内容

    默认情况下只会匹配第一个,通过设置模式g来开启全局匹配

    let str = "abcaecafcacc"
    
    let re = /a([a-z])c/g
    let result = re.exec(str)
    console.log(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    不开启全局匹配g模式,每次匹配的都是第一个

    image-20221203221658735

    开启全局匹配g模式:从头一直匹配到尾

    image-20221203221640009

    在正则表达式中添加括号表示分组,因此我们现在可以拿到中间的字母(返回数组的第二个元素):

    如果有多个括号的话,返回的顺序是按照左括号出现的顺序返回的

    image-20221203221917966

    获取所有的匹配到的结果,使用循环可以实现

    let str = "abcaecafcacc"
    
    let re = /a([a-z])c/g
    let result = re.exec(str)
    
    while(result){
        console.log(result[0], result[1])
        result = re.exec(str)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20221203222120231

    6 例子

    1. 检查字符串中有没有字符串ab
    re = /ab/
    re.test("abc")
    
    • 1
    • 2

    image-20221203215010958

    1. 检查字符串中有没有a或b

    方法一:使用|

    image-20221203215113172

    方法二:使用[]

    image-20221203215345627

    1. 检查字符串中有没有小写字母

    image-20221203215515315

    1. 检查字符串中有没有除了小写字母之外的符号

    image-20221203215824435

    1. 检查字符串中是否以m开头或者结尾

    image-20221203220358652

    1. 检查字符串是不是abc

    image-20221203220543090

    1. 检查字符串中是否有连续出现三次ab

    image-20221203220943835

  • 相关阅读:
    Android 11.0 mt6771新增分区功能实现四
    窗帘墙布完美搭配,让居室更加温馨有品味 - 江南爱窗帘十大品牌
    JavaScript基础:数据类型
    form表单,formdata对象,实现文件上传
    反絮凝剂-氨碘肽滴眼液
    Android kotlin开启协程的几种方式
    Java反射机制
    linux系统选择
    常用的鼠标事件和键盘事件
    C语言小游戏之三子棋(井字棋)(1.5w字超详细讲解)
  • 原文地址:https://blog.csdn.net/qq_46311811/article/details/128207785