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

匹配方法:

正则对象方法: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前端面试 - 面试官系列

相关推荐
小高0073 分钟前
带新人踩坑实录:行内 onclick 找不到函数?三分钟彻底搞懂作用域!
前端·javascript·面试
怪侠欧阳波9 分钟前
Hexo博客部署Cloudflare Pages完整指南
前端·javascript
Trust yourself2431 小时前
在easyui中如何自定义表格里面的内容
前端·javascript·easyui
程序员二师兄1 小时前
鸿蒙基础建设之IAP支付接入
前端·javascript·harmonyos
Smalike1 小时前
斗胆预测未来的前端开发方式:从“码农”到“AI调酒师”的奇幻漂流
前端·javascript
程序媛李李李李李蕾2 小时前
我亲历了2025年最荒谬的前端灾难:一支触控笔"干掉"了全球CSS预处理器
前端·javascript
独立开阀者_FwtCoder2 小时前
禁掉了 AI 代码补全,返璞归真,享受原汁原味的 IDE~
前端·javascript·程序员
好好研究2 小时前
js的基本内容:引用、变量、打印、交互、定时器、demo操作
前端·javascript·交互
Smalike2 小时前
Vue 到底为我们解决了什么问题?
前端·javascript
十五_在努力2 小时前
一篇文章实现 Element Plus 动态切换主题色
前端·javascript·vue.js