正则表达式系列之 —— 模式(Patterns)和修饰符(flags)

正则表达式 修饰符与元字符 | 一看就懂!!!(三) 标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。标记不写在正则表达式里,标记位于表达式之外,格式如下:修饰符含义描述iignore - 不区分大小写将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。gglobal - 全局匹配查找所有的匹配项。mmulti line - 多行匹配使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。s特殊字符圆点 . 中包含换行符 \n。 阅读详情

a189aca6b67c9fc76d2c6186533f3072.png

本号是《现代 JavaScript 教程》[1]官方微信公众号

模式和修饰符

正则表达式是提供了一种在文本中进行搜索和替换的强大的方式的模式。

在 JavaScript 中,我们可以通过 RegExp[2] 对象使用它们,也可以与字符串方法结合使用。

正则表达式

正则表达式(可叫作 "regexp",或 "reg")包扩 模式 和可选的 修饰符。

有两种创建正则表达式对象的语法。

较长一点的语法:

regexp = new RegExp("pattern", "flags");

较短一点的语法,使用斜线 "/":

regexp = /pattern/; // 没有修饰符
regexp = /pattern/gmi; // 带有修饰符 g、m 和 i(后面会讲到)

斜线 /.../ 告诉 JavaScript 我们正在创建一个正则表达式。它的作用与字符串引号的作用相同。

在这两种情况下,regexp 都会成为内建类 RegExp 的一个实例。

这两种语法之间的主要区别在于,使用斜线 /.../ 的模式不允许插入表达式(如带有 ${...} 的字符串模板)。它是完全静态的。

在我们写代码时就知道正则表达式时则会使用斜线的方式 —— 这是最常见的情况。当我们需要从动态生成的字符串“动态”创建正则表达式时,更经常使用 new RegExp。例如:

let tag = prompt("What tag do you want to find?", "h2");

let regexp = new RegExp(`<${tag}>`); // 如果在上方输入到 prompt 中的答案是 "h2",则与 /<h2>/ 相同

修饰符

正则表达式可能会有的会影响搜索结果的修饰符。

在 JavaScript 中,有 6 个修饰符:

i:使用此修饰符后,搜索时不区分大小写:A 和 a 之间没有区别(请参见下面的示例)。

g:使用此修饰符后,搜索时会寻找所有的匹配项 —— 没有它,则仅返回第一个匹配项。

m:多行模式(详见 锚点 ^ $ 的多行模式,修饰符 "m"[3])。

s:启用 "dotall" 模式,允许点 . 匹配换行符 \n(在 字符类[4] 中有详细介绍)。

u:开启完整的 Unicode 支持。该修饰符能够正确处理代理对。详见 [Unicode:修饰符 "u" 和类 \p{...}](https://zh.javascript.info/regexp-unicode "Unicode:修饰符 "u" 和类 \p{...}")。

y:粘滞模式,在文本中的确切位置搜索(详见 [粘性标志 "y",在位置处搜索](https://zh.javascript.info/regexp-sticky "粘性标志 "y",在位置处搜索"))

颜色

接下来,各部分的颜色如下:

  • 正则表达式 —— red

  • 字符串(我们搜索的地方)—— blue

  • 结果 —— green

搜索:str.match

正如前面所提到的,将正则表达式和字符串方法结合一起使用。

str.match(regexp) 方法在字符串 str 中寻找 regexp 的所有匹配项。

它有 3 种工作模式:

  1. 如果正则表达式具有修饰符 g,它返回一个由所有匹配项所构成的数组:

    let str = "We will, we will rock you";
    
    alert( str.match(/we/gi) ); // We,we(由两个匹配的子字符串构成的数组)

    请注意,We 和 we 都被找到了,因为修饰符 i 使得正则表达式在进行搜索时不区分大小写。

  2. 如果没有这样的修饰符,它则会以数组形式返回第一个匹配项,索引 0 处保存着完整的匹配项,返回的结果的属性中还有一些其他详细信息:

    let str = "We will, we will rock you";
    
    let result = str.match(/we/i); // 没有修饰符 g
    
    alert( result[0] );     // We(第一个匹配项)
    alert( result.length ); // 1
    
    // 详细信息:
    alert( result.index );  // 0(匹配项的位置)
    alert( result.input );  // We will, we will rock you(源字符串)

    如果正则表达式中有一部分内容被包在括号里,那么返回的数组可能会有 0 以外的索引。我们将在 捕获组[5] 中学习这部分相关内容。

  3. 最后,如果没有匹配项,则返回 null(无论是否有修饰符 g)。

    这是一个非常重要的细微差别。如果没有匹配项,我们不会收到一个空数组,而是会收到 null。忘了这一点可能会导致错误,例如:

    let matches = "JavaScript".match(/HTML/); // = null
    
    if (!matches.length) { // Error: Cannot read property 'length' of null
      alert("Error in the line above");
    }

    如果我们希望结果始终是一个数组,我们可以这样写:

    let matches = "JavaScript".match(/HTML/) || [];
    
    if (!matches.length) {
      alert("No matches"); // 现在可以了
    }

替换:str.replace

str.replace(regexp, replacement) 方法使用 replacement 替换在字符串 str 中找到的 regexp 的匹配项(如果带有修饰符 g 则替换所有匹配项,否则只替换第一个)。

例如:

// 没有修饰符 g
alert( "We will, we will".replace(/we/i, "I") ); // I will, we will

// 带有修饰符 g
alert( "We will, we will".replace(/we/ig, "I") ); // I will, I will

第二个参数是字符串 replacement。我们可以在其中使用特殊的字符组合来对匹配项进行插入:

符号在替换字符串中的行为
$&插入全部匹配项的内容
$`插入匹配项前面的一段字符串
$'插入匹配项后面的一段字符串
$n如果 n 是一个 1-2 位数,则会插入第 n 个括号中的内容,详见 捕获组[6]
$<name>插入名称为 name 的括号中的内容,详见 捕获组[7]
$$插入字符 $

带有 $& 的一个示例:

alert( "I love HTML".replace(/HTML/, "$& and JavaScript") ); // I love HTML and JavaScript

测试:regexp.test

regexp.test(str) 方法寻找至少一个匹配项,如果找到了,则返回 true,否则返回 false。

let str = "I love JavaScript";
let regexp = /LOVE/i;

alert( regexp.test(str) ); // true

在后面的章节中,我们会学习更多正则表达式,通过更多的例子,也会遇到其他的方法。

关于这些方法的完整信息请见 正则表达式(RegExp)和字符串(String)的方法[8]。

总结

  • 正则表达式由模式和可选择修饰符构成:g、i、m、u、s 和 y。

  • 没有修饰符和特殊符号(稍后我们会学到),那么正则表达式的搜索和子字符串的搜索相同。

  • str.match(regexp) 方法寻找匹配项:如果带有修饰符 g,则会返回所有匹配项,否则只会返回第一个匹配项。

  • str.replace(regexp, replacement) 方法使用 replacement 替换 regexp 的匹配项:如果带有修饰符 g,则会替换所有匹配项,否则只会替换第一个匹配项。

  • regexp.test(str) 方法用于测试,如果找到至少一个匹配项则返回 true,否则返回 false。


现代 JavaScript 教程:开源的现代 JavaScript 从入门到进阶的优质教程。React 官方文档推荐,与 MDN 并列的 JavaScript 学习教程[9]。

在线免费阅读:https://zh.javascript.info

参考资料

[1]

《现代 JavaScript 教程》: https://zh.javascript.info/

[2]

RegExp: https://developer.mozilla.org/zh/docs/Web/JavaScript/Reference/Global_Objects/RegExp

[3]

锚点 ^ $ 的多行模式,修饰符 'm': https://zh.javascript.info/regexp-multiline-mode

[4]

字符类: https://zh.javascript.info/regexp-character-classes

[5]

捕获组: https://zh.javascript.info/regexp-groups

[6]

捕获组: https://zh.javascript.info/regexp-groups

[7]

捕获组: https://zh.javascript.info/regexp-groups

[8]

正则表达式(RegExp)和字符串(String)的方法: https://zh.javascript.info/regexp-methods

[9]

React 官方文档推荐,与 MDN 并列的 JavaScript 学习教程: https://zh-hans.reactjs.org/docs/getting-started.html#javascript-resources

【正则表达式】 正则表达式的修饰符有哪些? 正则表达式修饰符通过/pattern/flags扩展功能,核心7种:i(忽略大小写)、g(全局匹配)、m(多行模式)、s(单行模式)、u(Unicode支持)、y(粘性匹配)、x(忽略空白)。支持组合使用(如gi全局忽略大小写)和内联语法((?i)a)。注意语言差异:PHP的U反转贪婪性,Python的re.A仅匹配ASCII字符。 阅读详情

相关推荐

NLP文本清洗实战:语义保真下的标准化与可复现预处理

文本清洗是自然语言处理(NLP)中决定模型线上效果的关键环节,其本质并非简单删减噪声,而是在保留原始语义意图前提下,对编码混乱、标点冗余、emoji干扰、零宽字符等结构噪声进行系统性重建。其核心原理涵盖字符级归一化、上下文感知的数字/日期处理、情感化emoji映射及繁简体统一等多维技术路径。该过程直接支撑搜索推荐、智能客服、金融舆情等高敏感业务场景的鲁棒性,技术价值体现在显著提升F1值(如<EXCLAMATION>标记带来2.3%增益)、保障跨环境结果一致性和降低bad case率。本文聚焦生产验证的七步标

weixin_30915275的博客 464

正则表达式的修饰符

需要注意的是,不同的编程语言和工具可能支持不同的修饰符或对修饰符有不同的命名方式。因此,在使用正则表达式时,最好查阅所使用语言或工具的文档以了解正确的修饰符用法。正则表达式的修饰符是用来修改和调整正则表达式的特殊字符或元字符。修饰符可以改变正则表达式的行为和匹配方式。这些修饰符可以直接添加到正则表达式的末尾,以空格分隔。,而忽略大小写的修饰符形式是。

1 1208

登临科技Goldwasser加速卡Python SDK实战:从环境配置到YOLOv5模型性能压测

本文详细介绍了登临科技Goldwasser加速卡的Python SDK实战指南,从环境配置到YOLOv5模型性能压测的全过程。通过驱动安装、SDK环境搭建、模型转换与推理优化等步骤,帮助开发者高效利用AI加速卡提升深度学习模型性能。重点分享了批量推理压测技巧和常见问题解决方案,助力开发者充分发挥Goldwasser加速卡的算力优势。

weixin_29035147的博客 301

Java正则表达式之Pattern的flag

Java正则表达式中的Pattern类提供了一些标志(flag)来修改正则表达式的行为。当编译正则表达式时,你可以使用一组标志(flags)来修改正则表达式的行为。Java正则表达式中的Pattern类用于表示编译后的正则表达式,而flag则是在编译正则表达式时使用的选项。这些标志可以单独使用,也可以通过按位或(|)的方式组合使用。类用于表示一个正则表达式,并且可以通过不同的标志(flags)来修改正则表达式的行为。请注意,不同的标志可能会影响正则表达式的行为,因此在选择标志时要仔细考虑你的需求。

kfepiza的博客 1462

蓝牙开发那些事之ceva controller代码解读

对比ceva的经典蓝牙和ble的controller在软件上的差异点

袁赟的博客 1093

手机OIS马达拆解:从苹果的悬丝到三星的滚珠,不同方案如何影响你的拍照体验?

本文深度解析手机OIS马达技术,对比苹果悬丝式、三星滚珠式和LG记忆合金式三种主流方案的机械原理与成像体验差异。通过详实的数据和测试结果,揭示不同OIS技术如何影响防抖性能、模组厚度及长期可靠性,为摄影爱好者和技术爱好者提供实用选购建议。

weixin_42554408的博客 308

【正则表达式】修饰符与替换详解

修饰符(Modifiers)是正则表达式中的一种特殊字符,用于控制匹配模式的行为。通过添加修饰符,开发者可以更灵活地控制正则表达式的匹配规则。例如,修饰符可以让匹配忽略大小写、进行全局查找或多行匹配等。正则表达式的替换操作允许我们根据匹配的模式修改字符串中的内容。通常,替换操作通过正则表达式匹配到部分内容后,用新的字符串或函数结果来替换原有的匹配部分。正则表达式中的修饰符与替换功能为开发者提供了灵活且强大的文本处理工具。

lph159的博客 1879

Tessent --- PDL

当关联的ICL模块是当前ICL顶部模块时,即当它与当前设计匹配时,只能iCall一个iTopProc。但是,可以在iTopProc内调用iCall iProc或iTopProc。为指定后续iProc命令引用的ICL模块,发出这个命令之后,随后定义的iProc都会对应的ICL模块进行定义。为后续iCall调用,当使用iCall命令调用该过程时,参数列表中的变量将被替换为iCall命令中指定的值。在调用iProc时,运行iProc内的命令。PDL是面向工程师的,工程师利用PDL语言,对ICL中的单元进行控制。

qiantianyiqian的博客 2791

正则表达式 --- 模式(Patterns)和修饰符(flags)(一)

模式(Patterns)和修饰符(flags) 正则表达式是搜索和替换字符串的一种强大方式。 在 JavaScript 中,正则表达式通过内建的“RegExp”类的对象来实现,并与字符串集成。 请注意,在各编程语言之间,正则表达式是有所不同的。在本教程中,我们只专注于 JavaScript。当然,它们有很多共同点,但在 Perl、Ruby 和 PHP 等语言下会有所不同。 正则表达式 正则表达式(可叫作“regexp”或者“reg”)包含 模式 和可选的 修饰符。 创建一个正则表达式对象有两种语法。 较长一

秋天,黄叶坠地,凉风有信。 993

MTGS与3D高斯泼溅:如何用多轨迹数据重建自动驾驶场景(附代码解析)

本文深入解析了MTGS(多轨迹高斯泼溅)技术在自动驾驶场景重建中的工程实践。该方法通过分层场景表示,巧妙融合多轨迹数据,利用3D高斯泼溅技术统一处理静态几何与动态物体,有效解决了复杂环境下的重建难题。文章结合代码,详细阐述了其实现框架、损失函数设计及优化策略,为构建高保真数字孪生场景提供了实用指南。

v5w6x的博客 446

【WorkBuddy】WorkBuddy 智能体快速上手:从零到一的实践指南

文章摘要: 传统自动化脚本难以应对灵活多变的自然语言需求,导致逻辑复杂、维护成本高。智能体(Agent)通过理解语义意图、动态决策和松耦合组件解决了这些问题。WorkBuddy采用声明式配置,通过可视化界面定义意图、实体和对话策略,无需编码即可快速构建智能体。其核心组件包括意图分类、实体提取、对话策略、故事样本和回退机制,适用于客服支持、知识问答等高频场景。通过环境准备(Python/Node.js/Redis)和简单配置,用户可以快速搭建可运行的智能体,显著提升自动化效率。

ruiqideng的博客 1673

CPython re 模块正则表达式 HOWTO:从模式语法到匹配引擎的实战指南

本文以 CPython 官方文档 [Doc/howto/regex.rst](https://link.gitcode.com/i/59c271d8f1cf11ba27091f1040ca558a) 为骨架,系统讲解 Python 内置 `re` 模块中的正则表达式(Regular Expression,简称 RE / regex)。你将掌握字符匹配、重复量词、分组与捕获、预查断言、字符串拆分与替

gitblog_00885的博客 473

【Matlab】刃边法计算mtf

摘要:刃边法是一种测量光学系统调制传输函数(MTF)的常用方法。本文介绍了基于Matlab的MTF计算实现方案,包括图像灰度化、梯度计算、刀口方向选择、梯度投影等关键步骤,并给出了完整的代码实现。该方案可通过添加图像预处理、多方向计算、函数封装等方式进行扩展,提高MTF计算的准确性和实用性,适用于不同应用场景的光学系统性能评估需求。(148字)

unber的博客 389

别再死记硬背了!用‘闯关游戏’思维图解JavaScript正则表达式核心语法

本文通过游戏化思维解析JavaScript正则表达式核心语法,帮助开发者从基础构造到实战应用逐步掌握。内容涵盖密码强度检测、电商价格提取、表单验证等实用场景,并分享性能优化与调试技巧,让复杂的正则表达式学习变得轻松有趣。

weixin_30520015的博客 342

TC3XX - MCAL知识点(九):PWM EB-tresos配置说明及代码浅析

脉冲宽度调制(PWM)驱动器负责提供与AUTOSAR指定的PWM信号生成相关的标准服务。PWM通道的底层定时器驱动是GTM (TOM或ATOM片)或CCU6 (T12或T13片)定时器通道。软硬件匹配关系如下:PWM直接引用的是GTM与CCU6模块,然后GTM与CCU6再关联到Port的,根据软硬件匹配关系,也能调用中断来使用,本例子没使用中断。CCU6是一个高分辨率的16位捕获和比较单元,具有特定的应用模式,主要用于交流驱动控制。特殊的工作模式支持控制无刷直流电机使用霍尔传感器或反电动势检测。

梦想技术家 2887

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python字符串包含判断:in、find、index与正则的选型指南

字符串包含判断是编程中最基础的文本处理操作,本质属于子串匹配问题,其核心原理涉及算法策略(如Boyer-Moore-Horspool)、Unicode编码处理及运行时语义设计。不同方法在语义表达(布尔存在性 vs 位置索引 vs 异常契约)、性能表现(毫秒级差异在高频场景可放大为千核小时损耗)和技术约束(大小写折叠、emoji字素簇、BOM兼容性)上存在本质分野。实际应用涵盖日志解析、敏感词过滤、权限校验、HTTP头提取等典型场景,需根据是否需要位置信息、失败频率、模式复杂度和字符集特性进行精准选型。本文聚

weixin_33690367的博客 414

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python自动化音频元数据整理:从ID3标签原理到批量修复实战

音频元数据是描述音频文件内容的信息标签,如ID3标签,它包含了标题、艺术家、专辑和封面等关键信息。其原理是通过标准化的数据结构嵌入音频文件内部,便于播放器识别和分类。这项技术的核心价值在于实现音乐库的自动化管理,显著提升信息检索与浏览效率。在工程实践中,结合Python的mutagen库,可以批量读取和写入标签;通过正则表达式解析文件名,并调用MusicBrainz等在线数据库API进行智能匹配,最终实现个人音乐库的自动化整理与修复。本文以Python脚本为例,详细演示了如何构建一个完整的音频元数据处理工具

weixin_34184561的博客 427

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Web服务器-正则表达式-整理+复习(3.1.1)

文章目录1.常用api2.例子3.正则表达式模式关于作者 参考文章 1.常用api re.match(pattern, string, flags=0) pattern 匹配的正则表达式 string 要匹配的字符串。 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 re.group(index) re.groups(...

BothSavage 342

Re——正则表达式_匹配项(pattern) and 模式(flag)

匹配项(pattern): 1、 (?=…) —> 如果匹配……匹配next,但不使用任何字符串。这称为前向断言。 eg: >>> r = re.search('def(?=abc)','defabc') >>> r.group() 'def' /* 注: 这个也是条件匹配只不过条件紧挨着要匹配字符串的后面! 2、(?!..) —> 如果匹配...

souldoms的博客 1757

正则表达式——修饰符

正则表达式——修饰符(标记) 标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。 标记不写在正则表达式里,标记位于表达式之外,格式如下: /pattern/flags i ignore-不区分大小写 将匹配设置为不区分大小写,A a没有区别 g global-全局匹配 查找所有的匹配项 m multi line - 多行匹配 使边界字符^和$匹配每一行的开头和结尾而不是整个字符串 s 特殊字符圆点 . 中包含换行符\n 默认情况下的圆点.是匹配除换行符\n之外的任何字符, 加上s修

weixin_43366084的博客 2375

JavaScript 正则表达式全面总结

为什么80%的码农都做不了架构师?>>> ...

weixin_34400525的博客 305

@Pattern的用法

版权声明:本文为优快云博主「wojiaohb」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.youkuaiyun.com/wojiaohb/article/details/106716802。关于注解中需要传的参数:一般默认就填入正则表达式即可,但是java中字符串需要转义,这个需要注意一下。犹豫上面写不下,以下是单独标记的方式,可供参考。把这个注解加在entity的参数上,可以选择分类也可以默认;一、校验数字的表达式。二、校验字符的表达式。

Purpletaro的专栏 6165

正则表达式详解-python

1.re模块的主要方法 re.compile: 编译一个正则表达式模式(pattern) re.match: 从头开始匹配, 使用group()方法可以获取第一个匹配值 re.search: 用包含方式匹配,使用group()方法可以获取第一个匹配值 re.findall: 用包含方式匹配,把所有匹配到的字符放到以列表中的元素返回多个匹配值 re.sub: 匹配字符并替换 re.split: 以匹配到的字符当做列表分隔符,返回列表 2.Python正则..

weixin_42289273的博客 2869

正则表达式 - 修饰符(标记)

正则表达式修饰符(Flags/Modifiers)是用于修改正则表达式匹配行为的特殊标记。核心6个修饰符包括:i(忽略大小写)、g(全局匹配)、m(多行模式)、s(点号通配)、u(Unicode支持)和y(粘性匹配)。这些修饰符可以单独或组合使用,如gi表示全局且忽略大小写。它们能灵活调整默认匹配行为,适用于不同场景,如处理多行文本、国际化字符或连续匹配需求。不同编程语言的实现方式略有差异,但功能相似。合理使用修饰符能显著提升正则表达式的适用性和效率。

likuolei的博客 895

JS高级 之 RegExp - 正则表达式

JS高级 之 RegExp - 正则表达式

玄鱼殇 1万+

正则表达式校验器@Pattern(regexp)

确保字符串符合特定的模式。

anyeyeyeyeye的博客 1543
上一篇: 正则表达式系列之 —— Unicode:修饰符 "u" 和类 \p{...}
LeviDing
博客等级 码龄10年 40粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值