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"
相关推荐
明月看潮生1 天前
青少年编程与数学 02-008 Pyhon语言编程基础 24课题、正则表达式
开发语言·python·青少年编程·正则表达式·编程与数学
呀啊~~1 天前
【前端基础】深入解析JavaScript中的编译原理、内存管理、垃圾回收机制和正则表达式
前端·javascript·学习·正则表达式
c无序1 天前
正则表达式的简单介绍 + regex_match使用
正则表达式
2401_861615281 天前
正则表达式
正则表达式
真想骂*2 天前
打造iOS电话号码输入验证:正则表达式应用实例
ios·正则表达式·cocoa
编程星空3 天前
正则表达式
正则表达式
陈奕迅本讯5 天前
正则表达式
正则表达式
来恩10036 天前
C# 字符串与正则表达式介绍
数据库·正则表达式·c#
一水鉴天6 天前
为AI聊天工具添加一个知识系统 之75 详细设计之16 正则表达式 之3 正则表达式模板
人工智能·正则表达式