js中,正则表达式m修饰符说明

news/2025/2/9 0:02:30/

在 JavaScript 的正则表达式中,修饰符 m(多行模式)并不是严格按照回车(\r)作为换行准则,而是以换行符(\n)、回车符(\r)、回车后跟着换行符(\r\n)等行终止符作为换行判断依据。下面详细解释:

修饰符 m 的作用

在默认情况下,正则表达式中的锚点 ^ 匹配字符串的开始位置,$ 匹配字符串的结束位置。当使用修饰符 m 开启多行模式时,^ 不仅能匹配整个字符串的开始位置,还能匹配每一行的行首;$ 不仅能匹配整个字符串的结束位置,还能匹配每一行的行尾。

行终止符的定义

JavaScript 里,常见的行终止符有:

  • \n:换行符,常用于 Unix 和 Linux 系统。
  • \r:回车符,早期用于 Mac 系统。
  • \r\n:回车后跟着换行符,常用于 Windows 系统。

示例代码

// 包含多行的字符串,包含不同的行终止符 
const multiLineText = "Hello\nWorld\rWelcome\r\nEveryone"; // 不带 m 修饰符的正则表达式 
const patternWithoutM = /^Welcome/; 
console.log(patternWithoutM.test(multiLineText));  // false // 带 m 修饰符的正则表达式 
const patternWithM = /^Welcome/m; 
console.log(patternWithM.test(multiLineText));  // true 

代码解释

  • 示例中的字符串 multiLineText 包含了不同的行终止符(\n\r 和 \r\n)。
  • 正则表达式 /^Welcome/ 没有使用 m 修饰符,^ 仅匹配整个字符串的开始位置,所以 patternWithoutM.test(multiLineText) 返回 false
  • 正则表达式 /^Welcome/m 使用了 m 修饰符,^ 不仅匹配整个字符串的开始位置,还能匹配每一行的行首,所以 patternWithM.test(multiLineText) 返回 true

综上,JavaScript 正则表达式的修饰符 m 会识别多种行终止符来实现多行匹配,而不只是以回车作为换行准则。

例子2

在 JavaScript 中,正则表达式的修饰符 m 是多行模式(multiline mode)。当使用修饰符 m 时,^ 和 $ 匹配的不再是整个字符串的开始和结束位置,而是每一行的开始和结束位置。

示例代码

// 定义一个包含多行文本的字符串 
const multiLineText = `Hello 
World 
JavaScript`; // 定义一个正则表达式,使用 m 修饰符 
const regexWithM = /^[A-Z]/gm; // 使用 match 方法查找所有匹配项 
const matches = multiLineText.match(regexWithM);  // 输出匹配结果 
console.log(" 匹配到的首字母:", matches); 

代码解释

  1. 定义多行文本字符串
    • multiLineText 是一个包含多行文本的字符串,每行以换行符分隔。
  2. 定义正则表达式并使用 m 修饰符
    • /^[A-Z]/gm 是正则表达式,其中 ^ 表示行的开始,[A-Z] 表示匹配大写字母,g 修饰符表示全局匹配(查找所有匹配项而不是找到第一个就停止),m 修饰符表示多行模式。
  3. 使用 match 方法查找匹配项
    • multiLineText.match(regexWithM) 方法会在 multiLineText 中查找所有满足正则表达式的匹配项,并返回一个包含所有匹配项的数组。
  4. 输出结果
    • console.log 输出匹配到的所有大写字母,即每行的首字母。

没有使用 m 修饰符的对比示例

// 定义一个包含多行文本的字符串 
const multiLineText = `Hello 
World 
JavaScript`; // 定义一个正则表达式,不使用 m 修饰符 
const regexWithoutM = /^[A-Z]/g; // 使用 match 方法查找所有匹配项 
const matchesWithoutM = multiLineText.match(regexWithoutM);  // 输出匹配结果 
console.log(" 不使用 m 修饰符的匹配结果:", matchesWithoutM); 

在没有使用 m 修饰符的情况下,^ 只匹配整个字符串的开始位置,所以只会匹配到第一行的首字母。而使用 m 修饰符后,^ 会匹配每一行的开始位置,从而匹配到所有行的首字母。

例子3 

let str = "line1\nline2\nline3\n"; 
let regex3 = /3$/;  // 没有m修饰符
let regex4 = /3$/m; // 有m修饰符console.log(regex3.exec(str));  // 输出为null,因为整串中最后有个换行符,"3"不是在整个字符串的绝对结尾
console.log(regex4.exec(str));  // 输出 ["3"],因为m修饰符使得"$"可以匹配每行换行前的位置,最后一行换行前就是"3"


http://www.ppmy.cn/news/1570452.html

相关文章

python学opencv|读取图像(五十八)使用cv2.erode()函数实现图像腐蚀处理

【1】引言 前序学习过程中,已经掌握了对图像的阈值处理、按位叠加、滤波操作等技巧,相关文章链接包括且不限于: python学opencv|读取图像(五十)使用addWeighted()函数实现图像加权叠加效果-CSDN博客 python学opencv…

【戒抖音系列】短视频戒除-1-对推荐算法进行干扰

如今推荐算法已经渗透到人们生活的方方面面,尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨,慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…

maven如何分析指定jar包的依赖路径

在Maven项目中,分析指定JAR包的依赖路径是非常有用的,尤其是在解决依赖冲突时。Maven提供了一个命令行工具来帮助查看特定依赖的传递性依赖(即依赖路径)。以下是具体步骤: 使用 mvn dependency:tree 命令 打开命令行或…

unity学习29:摄像机camera相关skybox 和 Render Texture测试效果

目录 1 摄像机 1.1 每个Scene里都自带一个摄像机 camera 1.2 可以创建多个camera 1.3 下面先看backgroundtype: 2 backgroundtype: 天空盒 skybox 2.1 清除标志,清除:天空盒 自选天空盒 2.2 window /Asset Store 2.3 导入skybox 3 backgroundtype: 纯色…

pycharm集成通义灵码应用

在pycharm中安装通义灵码 1、打开files-settings 2、选中plugins-搜索”TONGYI Lingma“,点击安装 3.安装完成后在pycharm的右侧就有通义灵码的标签 4、登录账号 5、查看代码区域代码,每一个方法前面都多了通义灵码的标识,可以直接选择…

Spring Boot篇

为什么要用Spring Boot Spring Boot 优点非常多,如: 独立运行 Spring Boot 而且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成 war 包部署到 容器 中,Spring Boot 只要打成一个可执行的 jar 包就能独…

Vue.js组件开发-实现底部浮动导航页面滚动预览

使用 Vue 实现底部浮动导航,并且在页面滚动时进行预览 步骤概述 创建 Vue 项目:使用 Vue CLI 创建一个新的 Vue 项目。设计页面结构:创建包含内容区域和底部浮动导航栏的页面结构。实现滚动监听:监听页面滚动事件,根…

七、深入学习TensorRT,Quantized

Working with Quantized Types(一) Quantization WorkflowsPost-training quantization (PTQ)Quantization-aware training (QAT)Quantization Modes 距离上一篇文章已经过去快一年了,这一年也真够忙的,也够累的,躺平吧又躺不平,赚…