当前位置: 首页 > news >正文

JS正则表达式实战:核心语法解析

JS中的正则表达式实例集锦:
部分语法类型核心含义
/.../定界符正则表达式的边界标识(JavaScript/Perl 等语言的标准写法),包裹正则主体。
\.转义字符匹配字面量的点号.。⚠️ 重点:正则中.是通配符(匹配任意单个字符),必须用\转义才能匹配实际的.
()分组符正则的 “分组” 语法,作用是:1. 把括号内的内容视为一个整体;2. 捕获匹配到的内容(可通过 $1/$2 等引用);⚠️ 这里括号内是空的,意味着 “匹配空内容”。
$锚点匹配字符串的结束位置,确保$前面的内容必须出现在字符串最后。
匹配 / 不匹配示例

javascript

// 示例1:匹配 .txt 结尾的文件(把空分组换成 txt) const reg1 = /\.(txt)$/; console.log(reg1.test("note.txt")); // true console.log(reg1.test("note.txt.bak")); // false(结尾不是 .txt) // 示例2:匹配 .json 或 .yml 结尾的文件(分组内加或逻辑) const reg2 = /\.(json|yml)$/; console.log(reg2.test("config.json")); // true console.log(reg2.test("docker.yml")); // true console.log(reg2.test("data.csv")); // false

?正则表达式

用法 1:匹配「前面的字符 / 分组」0 次或 1 次(最基础)

这是你之前在woff2?中看到的用法,也是最常用的。

  • 语法字符?(分组)?
  • 含义:表示它前面紧邻的那个字符 / 分组是「可选的」—— 匹配 0 次(没有)或 1 次(有)。
  • 示例
  • const reg = /^86?1[3-9]\d{9}$/; // 不带区号的 11 位手机号(正常场景) console.log(reg.test('13800138000')); // false console.log(reg.test('19912345678')); // false // 带 86 区号的手机号 console.log(reg.test('8613800138000')); // true console.log(reg.test('8617788990011')); // true // 示例1:匹配 color 或 colour(英式拼写) const reg1 = /colou?r/; console.log(reg1.test('color')); // true(u 出现 0 次) console.log(reg1.test('colour')); // true(u 出现 1 次) console.log('colouur is :',reg1.test('colouur'));// false(u 出现 2 次) // 示例2:匹配手机号(可选带区号 86) const reg2 = /^86?1[3-9]\d{9}$/; console.log('13800138000 is :',reg2.test('13800138000')); // false(86 出现 0 次) console.log(reg2.test('8613800138000')); // true(86 出现 1 次) console.log(reg2.test('88613800138000'));// false(86 多了个 8)

    用法 2:将「贪婪匹配」转为「非贪婪匹配」(重要)

    正则默认是「贪婪模式」(尽可能多匹配),?加在*/+/?/{n,m}后,会变成「非贪婪模式」(尽可能少匹配)。

  • 语法*?/+?/??/{n,m}?
  • 含义:匹配到满足条件的「最短内容」就停止。
  • 示例

    javascript

    const str = '<div>内容1</div><div>内容2</div>'; // 贪婪匹配(默认):匹配从第一个 <div> 到最后一个 </div> 的所有内容 const regGreedy = /<div>.*<\/div>/; console.log(str.match(regGreedy)[0]); // 输出:<div>内容1</div><div>内容2</div> // 非贪婪匹配(加?):匹配第一个 <div> 到最近的 </div> const regNonGreedy = /<div>.*?<\/div>/; console.log(str.match(regNonGreedy)[0]); // 输出:<div>内容1</div>

http://www.jsqmd.com/news/245034/

相关文章:

  • 自动驾驶不同工况避障模型(perscan、simulink、carsim联仿),能够避开预设的...
  • 机器学习的演进与深度学习的革命
  • 【远程协助】内网 IT 运维远程协助系统的最小可用架构
  • 【稳定性】内网会议系统“跑一整天不重启”的关键设计点
  • 【实战复盘】一次真实内网会议系统部署踩坑全记录(含失败方案)
  • 关于pycharm中Module parse failed: ‘import‘ and ‘export‘ may appear only with ‘sourceType: module‘ (1:0)
  • AI 当主程?TRAE SOLO+cpolar 让开发效率翻倍的真实体验
  • 【MIMO OFDM】基于matlab小波变换MIMO OFDM通信仿真【含Matlab源码 14928期】
  • 如何用云服务器搭建传奇游戏服务器
  • 如何利用云服务器搭建游戏服务器并实现跨平台游戏?
  • 吐血推荐专科生必用的9款AI论文工具
  • 最近邻算法 (kNN) 通俗讲解
  • pytorch深度学习笔记16
  • Spring 事务核心知识点全梳理(编程式 + 声明式 + 注解详解)
  • OpenCode:开源AI代理如何改变你的编程工作流
  • 【源码 + 文档】SpringBoot+Vue 开发网上购物商城系统(附完整设计文档)
  • 【正点原子STM32MP157学习篇】A7和M4联合调试(通过STM32CubeIDE)
  • 对 两种不同AI范式——Transformer 和 LSTM 进行解剖和对比
  • 支持向量机 (SVM) 通俗解读
  • 提示工程架构师别再等!Agentic AI的3大市场优势,已经让同行抢先一步了
  • 【MIMO OFDM】小波变换MIMO OFDM通信仿真【含Matlab源码 14928期】
  • 深度测评8个AI论文工具:本科生毕业论文写作全解析
  • 如何用云服务器搭建PUBG服务器?
  • Excel VBA 编程基础学习笔记 · 第六章:字典技术 - 掌握高级数据映射与处理的王牌工具
  • 租赁Anritsu MT8852B蓝牙测试仪
  • 大模型产业价值链深度解析:从基础设施到应用层的全景指南
  • 【MIMO通信】MIMO检测器(ZF、MMSE、SIC、ML)在瑞利衰落下的BER性能比较【含Matlab源码 14929期】含报告
  • Excel VBA 编程基础学习笔记 · 第四章:事件编程 - 打造智能交互的自动化引擎
  • BUUCTF-[ACTF2020 新生赛]Upload
  • 发刊不用愁:paperxie 期刊论文功能,一键匹配普通刊 / 核心刊的学术标准