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

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

在 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.kler.cn/a/536598.html

相关文章:

  • 中国城商行信贷业务数仓建设白皮书(第五期:智能决策体系构建)
  • 4.PPT:日月潭景点介绍【18】
  • python学opencv|读取图像(五十六)使用cv2.GaussianBlur()函数实现图像像素高斯滤波处理
  • 如何使用el-table的多选框
  • 2.6-组合博弈入门
  • k8s常见面试题2
  • 数据完整性与约束的分类
  • 如何制定旅游计划:从零开始的旅行规划
  • 让相机自己决定拍哪儿!——NeRF 三维重建的主动探索之路
  • Repo vs Git:区别与优缺点
  • kafka服务端之延时操作前传--时间轮
  • docker 安装 mindoc
  • python小项目编程-初级(1、计算器)
  • 使用动态协议包,实现客户端与服务器端
  • 【探商宝】DeepSeek 最新模型对 ChatGPT 的影响及行业新变革
  • Java全栈项目:酒店客房管理系统
  • 【华为OD机考】2024E+D卷真题【完全原创题解 详细考点分类 不断更新题目 六种主流语言Py+Java+Cpp+C+Js+Go】
  • Java基础知识总结(四十八)--TCP传输、TCP客户端、TCP服务端
  • OnlyOffice 全面指南:从基础使用到深度自定义
  • postgreSQL16.6源码安装
  • unity学习29:摄像机camera相关skybox 和 Render Texture测试效果
  • IDEA启动项目慢问题处理
  • 详解代理模式
  • VSCode便捷开发
  • JS逆向案例-ali231补环境 - 14
  • 日本游戏机市场5年来首次陷入萎缩;特斯拉招人推进人形机器人量产;任天堂专利显示Switch2手柄可用作鼠标...| 游戏智眼日报