说说你对正则表达式的理解?

匹配方法:

正则对象方法:test(), exec() (execute全称)

字符串方法: replace(), match()

js 复制代码
      const reg1 = /abc/g

      const res1 = reg1.test('11abcde') //rest()查看是否匹配,返回true/false
      console.log(res1)

      const res2 = reg1.exec('bnabcdefg')  //只会返回第一个匹配的index(数组的形式),没有匹配到返回null
      console.log(res2)  

      const str1 = '学abc,来黑马abc'
      const res3 = str1.replace(reg1,'java')   //replace 敏感词替换
      console.log(res3)

      const str2 = '学abc,来黑马abc'
      const res4 = str2.match(reg1)   // 
      console.log(res4);              // ["abc","abc"]

exec()的输出

replace()第二个参数也可以不写,相当于replace(reg, '')

修饰符:

i:忽视大小写

g:全局匹配

m: 匹配多行

js 复制代码
    // i: 忽视大小写
    const reg = /a/i 
    console.log(reg.test('a'));    //true 
    console.log(reg.test('ABC')); //true

    //g: 全局匹配
    const reg1 = /java/gi
    const str = '学java,找黑马,java好,JAVA6'
    console.log(str.replace(reg1,'前端'))
    
    //m: 多行搜索 (Multiline)
    const text = "Line 1\nLine 2\nLine 3";
    const reg3 = /^Line 1/m; // 匹配 "Line 1"
    console.log(reg3.test(text)); // true

元字符(边界符):

单词边界 \b

匹配cat,遇到wildcat不匹配

js 复制代码
// 单词边界 \b
    const text = "The wildcat is a cat."
    // 1. 不使用 \b 的情况 (只匹配 "cat")
    const regex1 = /cat/;
    console.log(text.match(regex1)); // ["cat", index: 8, input: "...", groups: undefined] (只找到第一个 "cat")
    console.log(text.match(/cat/g)); // ["cat", "cat"] (找到所有 "cat",包括 "wildcat" 中的 "cat")

    // 2. 使用 \b 匹配完整的单词 "cat"
    const regex2 = /\bcat\b/g; // /g 标志用于找到所有匹配
    console.log(text.match(regex2)); // ["cat"] (只找到独立的 "cat")

字符串边界 ^ $

js 复制代码
// 字符串边界 ^ $
        const reg2 = /^a/        //以...开头
        console.log(reg2.test('aa'))    //true
        console.log(reg2.test('baa'))   //false

        const reg3 = /c$/       //以...结尾
        console.log(reg3.test('abc'))   //true
        console.log(reg3.test('bcd'))   //false

        const reg4 = /^a$/         //要求精确匹配
        console.log(reg4.test('a'))  //true
        console.log(reg4.test('aaa'))//false 

元字符(量词):

    • 0次或多次
    • 一次或多次
  • ? 0次或1次
  • {n} 只能有n次
  • {n,} 大于等于n次
  • {n,m} n~m次
javascript 复制代码
const reg = /^a*$/

元字符(字符类):

js 复制代码
    // [] 中括号里面的任意一个
    const reg = /[abc]/    //abc中的任意一个
    
    const reg1 = /[a-z]/  //a-z 26个字母中任意一个
    const reg2 = /[A-Z]/  //A-Z
    const reg3 = /[0-9]/  //0-9数字中任意一个
    const reg4 = /[a-zA-Z0-9]/

    //[^] 取反 必须在[]内部,没有[]表示以xxx开头 
    const reg5 = /[^abc]/  //匹配abc之外的任意一个

    //.匹配的除换行符之外的任意字符
    const reg6 = /./
    console.log(reg6.test('')) // false
    console.log(reg6.test('\n')) // false
    console.log(reg6.test('\r')) // false
    // \r 将光标移到本行开头 (return)   \n 换行(newline)
    // 经常配合起来使用 windows中 \r\n表示回车并换行。
    
    //预定义
    const reg7 = /\d/ // \d -> [0-9]
    const reg8 = /\D/ // \D -> [^0-9]
    const reg9 = /\w/ // \w -> [a-zA-Z0-9_]  26个英文字母,数字,下划线
    const reg10 = /\W/ // \W -> [^a-zA-Z0-9_]  取反
    const reg11 = /\s/ //匹配空格(包括换行,空格,制表符)  [\t\r\n\v\f]
    const reg12 = /\S/ //取反
    // \d (digit)    \w (word)    \s (whitespace) 
    // \t 水平制表符,用于对齐文本  \v 垂直制表符 

分组和分支结构

js 复制代码
    // 分组,括号内的视为整体
    const reg = /(ab)+/   //括号内的可重复
    console.log(reg.test('ababab')) //true
    console.log(reg.test('ababa'))  //false

    const reg2 = /^(\d{4})-(\d{2})-(\d{2})/
    const date = '2023-01-05'
    console.log(reg2.test(date))//true

    const reg3 = /前端|java/   //包含前端或者java都能匹配成功
    const str1 = '前端开始'
    const str2 = 'java炒饭'
    console.log(reg3.test(str1)); 

参考 面试官:说说你对正则表达式的理解?应用场景? | web前端面试 - 面试官系列

相关推荐
Keepreal4963 小时前
Web Components简介及如何使用
前端·javascript·html
进击的野人3 小时前
JavaScript变量声明的前世今生:从var到let/const的演进
javascript
柯腾啊4 小时前
“Script error.”的产生原因和解决办法
前端·javascript·浏览器
Cory.眼5 小时前
WebRTC入门指南:实时通信零基础
javascript·webrtc·实时通信
前端架构师-老李5 小时前
16 Electron 应用自动更新方案:electron-updater 完整指南
前端·javascript·electron
拖拉斯旋风5 小时前
📚 JavaScript 变量声明三剑客:`var`、`let`、`const` 学习笔记
javascript
可触的未来,发芽的智生7 小时前
追根索源:换不同的词嵌入(词向量生成方式不同,但词与词关系接近),会出现什么结果?
javascript·人工智能·python·神经网络·自然语言处理
努力写代码的熊大7 小时前
stack、queue与priority_queue的用法解析与模拟实现
java·前端·javascript
im_AMBER7 小时前
React 06
前端·javascript·笔记·学习·react.js·前端框架
m0_748233648 小时前
C++开发中的常用设计模式:深入解析与应用场景
javascript·c++·设计模式